2009-11-05 7 views
8

... System.Web.Mvc.Controller başlatma i şu ana denetleyicisi var

public class BaseController : Controller 
{ 

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

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

     base.Initialize(requestContext); 

    } 

} 

Temelde, bütün kontrolörler BaseController elde edecekleri ve belli bir değeri doğru ise onları yönlendirir. Ancak, bu kod çalışmıyor! RedirectToAction çağrısı yapılır, ancak Initialize yöntemi bittikten sonra, orijinal olarak adlandırılan denetleyiciye geçer.

Bu mantıklı mı?

Çok teşekkürler,

ETFairfax.

cevap

15

Sana yanlış yöntemi geçersiz kılmasını düşünüyorum. OnActionExecuting veya OnActionExecuted ile deneyin.

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

Güzel bir Misha N cevabınız için teşekkürler. Bunu okuyan başka biri için yanıt doğrudur, ancak Misha yanlış parametreyi yazdı; Geçirilmekte olan bir ActionExecutingContext nesnesi olmalıdır. Bunun dışında mükemmel! Teşekkürler tekrar Misha. – ETFairfax

+0

Ups, bunu düzeltildi. ETFairfax'a yardımcı olabildiğime sevindim –

-1

Bunun istediğini olup olmadığından emin değilim, ama bu deneyin:

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