2009-11-05 2 views
8

У меня есть следующий базовый контроллер ...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); 

    } 

} 

В принципе, все мои контроллеры извлекут из BaseController, и он будет перенаправлять их, если определенное значение верно. Однако этот код не работает !!! Вызывается вызов RedirectToAction, но после того, как метод Initialize будет завершен, он просто перейдет к первоначально названному контроллеру.

Имеет ли это смысл?

Большое спасибо,

ETFairfax.

ответ

15

Я думаю, что вы перекрывая неправильный метод. Попробуйте выполнить OnActionExecuting или OnActionExecuted.

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

Nice one Misha N благодарит за ответ. Для всех, кто мог бы это прочитать, ответ правильный, но Миша набрал неверный параметр; это должен быть объект ActionExecutingContext. Кроме этого, это прекрасно! Еще раз спасибо Миша. – ETFairfax

+0

Упс, исправлено это. Рад, что я мог бы помочь ETFairfax –

-1

Я не уверен, если это то, что вы хотите, но попробуйте это:

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