“不允许子操作执行重定向操作”

我有这个错误:

执行处理程序’System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper’的子请求时出错。

内部exception:

不允许子操作执行重定向操作。

知道为什么会这样吗?

顺便说一句,错误发生在这一行:

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

导航控制器中的菜单操作如下所示:

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

这是不允许的,因为MVC已经开始将View渲染到浏览器(客户端)。 因此MVC框架阻止了这一点,因为客户端已经接收到数据(html)。 只要渲染正在进行中,您就无法在子视图中重定向。

您可以改为返回RedirectToAction

这发生在我身上,因为我在Controller上有[RequireHttps],并且从另一个控制器调用了一个子动作。 RequireHttps属性导致重定向

代替

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

使用

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

为我工作:)

我和Doug描述的情况相同

我的解决方案: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()而不是返回View()