[英]“Child actions are not allowed to perform redirect actions”
我有這個錯誤:
執行處理程序“System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper”的子請求時出錯。
內部例外:
不允許子操作執行重定向操作。
知道為什么會這樣嗎?
順便說一句,錯誤發生在這一行:
@Html.Action("Menu", "Navigation")
導航控制器中的菜單操作如下所示:
public ActionResult Menu()
{
return PartialView();
}
這發生在我身上,因為我在控制器上有 [RequireHttps],並且從不同的控制器調用了一個子操作。 RequireHttps 屬性導致重定向
這是不允許的,因為 MVC 已經開始將視圖渲染到瀏覽器(客戶端)。 所以 MVC 框架阻止了這一點,因為客戶端已經接收到數據 (html)。 只要渲染正在進行中,您就無法在子視圖中重定向。
您可以改為返回RedirectToAction
。
代替
@Html.Action("Menu", "Navigation")
采用
@Url.Action("Menu", "Navigation")
為我工作:)
我有和上面描述的道格一樣的情況
我的解決方案: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]
像這樣重定向
string returnUrl = Request.UrlReferrer.AbsoluteUri;
return Redirect(returnUrl);
代替
return redirect("Action","Controller")
如果在控制器中添加了 [NoDirectAccess] 注釋,請刪除。
並在局部視圖的控制器中
返回 PartialView() 而不是 return View()
在 Html.Action 調用的 Action 執行重定向的情況下會發生這種情況,例如
return RedirectToAction("Error", "Home");
而不是返回所需的partialView
所以解決方案是刪除重定向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.