2009-11-05 14 views
8

Mam następujący podstawowy kontroler ...System.Web.Mvc.Controller Initialize

public class BaseController : Controller 
{ 

    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 

     if (something == true) 
      RedirectToAction("DoSomething", "Section"); 

     base.Initialize(requestContext); 

    } 

} 

Zasadniczo wszystkie moje kontrolery będą czerpać z BaseController i będzie je przekierować jeśli pewna wartość true. Jednak ten kod nie działa !!! Wywoływane jest przekierowanie do RedirectToAction, ale po zakończeniu metody Initialize nastąpi przejście do pierwotnie zwanego kontrolera.

Czy to ma sens?

Wielkie dzięki,

ETFairfax.

Odpowiedz

15

myślę, że są nadrzędne niewłaściwy sposób. Spróbuj z OnActionExecuting lub OnActionExecuted.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (something == true) 
      filterContext.Result = RedirectToAction("DoSomething", "Section"); 
     else 
      base.OnActionExecuting(filterContext); 
    } 
+1

Przyjemny jeden Misha N dzięki za odpowiedź. Dla każdego, kto mógłby to przeczytać, odpowiedź jest prawidłowa, ale Misha wpisał zły parametr; powinien to być obiekt ActionExecutingContext przekazany. Poza tym jest idealny! Jeszcze raz dziękuję Misha. – ETFairfax

+0

Ups, naprawiono. Cieszę się, że mogłem pomóc ETFairfax –

-1

Nie jestem pewien, czy to, co chcesz, ale spróbuj tego:

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    if (something == true) 
     RedirectToAction("DoSomething", "Section"); 
    else 
     base.Initialize(requestContext); 
} 
Powiązane problemy