2009-11-05 31 views
8

tôi có bộ điều khiển cơ sở sau đây ...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); 

    } 

} 

Về cơ bản, tất cả các bộ điều khiển của tôi sẽ xuất phát từ BaseController, và nó sẽ chuyển hướng họ nếu một giá trị nhất định là đúng. Tuy nhiên, mã này không hoạt động !!! Cuộc gọi đến RedirectToAction được thực hiện, nhưng sau khi phương thức Initialize được hoàn thành, nó sẽ chỉ chuyển sang bộ điều khiển ban đầu được gọi.

Điều đó có hợp lý không ??

Rất cám ơn,

ETFairfax.

Trả lời

15

Tôi nghĩ rằng bạn đang trọng phương pháp sai. Hãy thử với OnActionExecuting hoặc OnActionExecuted.

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

Tốt nhất một Misha N cảm ơn câu trả lời. Đối với bất kỳ ai khác có thể đọc câu trả lời này, câu trả lời là chính xác, nhưng Misha đã gõ sai tham số; nó phải là một đối tượng ActionExecutingContext được truyền đi. Khác hơn thế, nó hoàn hảo !! Cảm ơn một lần nữa Misha. – ETFairfax

+0

Ups, cố định điều đó. Rất vui khi tôi có thể giúp ETFairfax –

-1

Tôi không chắc chắn nếu điều này là những gì bạn muốn, nhưng hãy thử này:

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    if (something == true) 
     RedirectToAction("DoSomething", "Section"); 
    else 
     base.Initialize(requestContext); 
} 
Các vấn đề liên quan