2012-01-19 43 views
8

我有這樣的錯誤:「孩子的行爲是不允許進行重定向操作」

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.

與內部異常:

Child actions are not allowed to perform redirect actions.

任何想法,爲什麼出現這種情況?

順便說一下,錯誤是發生在這條線:

@Html.Action("Menu", "Navigation") 

在導航控制器的菜單操作是這樣的:

public ActionResult Menu() 
{ 
    return PartialView(); 
} 
+0

,你可以看看這個問題http://stackoverflow.com/questions/2056421/why-are-redirect-results-not -allow-in-child-actions-in-asp-net-mvc-2 – Tassadaque

+6

你打算今天問這個問題多少次?可能重複[執行處理程序的子請求錯誤](http://stackoverflow.com/questions/8924177/error-executing-child-request-for-handler) –

回答

5

這是不允許的,因爲MVC已經開始渲染查看瀏覽器(客戶端)。 所以MVC框架阻止了這個,因爲客戶端已經接收到數據(html)。只要渲染正在進行中,您無法在您的子視圖中重定向。

您可以改爲返回RedirectToAction

+5

'您可以返回RedirectToAction而不是'?令人困惑...... – dotNETbeginner

+0

我嘗試了很多解決方案來獲得自定義身份驗證過濾器的工作,並最終發現我的視圖調用'@ Html.Action()'而不是'@ Url.Action()'後者爲您提供了url一個鏈接,前者執行一個控制器動作,渲染它的視圖。非常令人沮喪,確保你沒有犯這個錯誤 –

+0

我在我的控制器中使用RedirectToAction,但它仍然給我錯誤 – Denny

9

這發生在我身上,因爲我在控制器上有[RequireHttps],並且從不同的控制器調用了一個子動作。該RequireHttps屬性導致重定向

1

I had same situation like Doug described above

我的解決辦法: 1)創建的自定義控制器廠。需要在我的自定義https屬性中獲取ControllerContext。

public class CustomControllerFactory : DefaultControllerFactory 
    { 
     public override IController CreateController(RequestContext requestContext, string controllerName) 
     { 
      var controller = base.CreateController(requestContext, controllerName); 
      HttpContext.Current.Items["controllerInstance"] = controller; 
      return controller; 
     } 
    } 
} 

2)從Global.asax文件的Application_Start函數接下來寫道:

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); 

3)定義的自定義屬性的https:

public class CustomRequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute 
    { 
     public bool RequireSecure = false; 

     public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) 
     { 

      if (RequireSecure && !((Controller)HttpContext.Current.Items["controllerInstance"]).ControllerContext.IsChildAction) 
      { 
       base.OnAuthorization(filterContext); 
      } 
     }   
    } 

4)使用新屬性帳戶的定義控制器: [CustomRequireHttps]

5

改爲o ˚F

@Html.Action("Menu", "Navigation") 

使用

@Url.Action("Menu", "Navigation") 

爲我工作:)

相關問題