2012-03-23 12 views

Odpowiedz

18

Możesz użyć filterContext.Result do tego. Powinno to wyglądać tak:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    //Check your condition here 
    if (true) 
    { 
     //Create your result 
     filterContext.Result = new EmptyResult(); 
    } 
    else 
     base.OnActionExecuting(filterContext); 
} 
+0

Dlaczego pomijasz base.OnActionExecuting, kiedy twój warunek jest prawdziwy? W moim przypadku muszę to uruchomić, zanim będę mógł ustawić Wynik. – xr280xr

33

Zobacz moją próbkę pobierania oraz MSDN artykuł Filtering in ASP.NET MVC.

Można anulować wykonanie filtra metodami OnActionExecuting i OnResultExecuting, ustawiając właściwość Result na wartość inną niż null.

Wszelkie oczekujące OnActionExecuted i OnActionExecuting filtry nie zostanie wywołany i wywołującego nie będzie wywołać metodę OnActionExecuted za odwołany filtr lub filtry dla oczekujących.

Zostanie uruchomiony filtr dla wcześniej uruchomionych filtrów. Zostaną uruchomione wszystkie filtry OnResultExecutingandOnResultExecuted.

Poniższy kod z próbki pokazuje, jak powrócić konkretny ActionResult gdy pewien warunek jest spełniony w OnActionExecuting:

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{ 
    filterContext.Result = new RedirectResult("~/Home/Index"); 
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index"); 
} 
+2

Należy zauważyć, że jeśli masz więcej niż jeden filtr i kolejność filtrów ma znaczenie, powinieneś podać parametr "Zamówienie" podczas rejestracji filtra, aby móc kontrolować kolejność wykonania, tak jak Rick opisał w swoich szczegółach dotyczących wyników Właściwość filterContext.Result zachowuje się. –

+0

Dobry punkt Nick - ale zobacz moją sekcję Porządek filtru - właściwość zamówienia dotyczy tylko filtrów w tej samej klasie. Auth zawsze uruchamia się jako pierwszy, wyjątek, ostatni. – RickAndMSFT

3

Można użyć następującego kodu tutaj.

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... 
    if (needToRedirect) //your condition here 
    { 
     ... 
     filterContext.Result = new RedirectToAction(string action, string controller) 
     return; 
    } 
    ... 
} 

RedirectToAction przekieruje użytkownika do określonej akcji na podstawie warunku.

+0

RedirectToAction jest metodą (przynajmniej w MVC5), więc nie możesz jej(). – rumblefx0

Powiązane problemy