我有这个错误:
执行处理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错。
内部异常:
不允许子操作执行重定向操作。
知道为什么会这样吗?
顺便提一下,错误发生在这一行:
@Html.Action("Menu", "Navigation")
导航控制器中的菜单操作如下所示:
public ActionResult Menu()
{
return PartialView();
}
答案 0 :(得分:9)
这发生在我身上,因为我在Controller上有[RequireHttps],并且从另一个控制器调用了一个子动作。 RequireHttps属性导致重定向
答案 1 :(得分:5)
这是不允许的,因为MVC已经开始将View渲染到浏览器(客户端)。 因此MVC框架阻止了这一点,因为客户端已经接收到数据(html)。只要渲染正在进行中,您就无法在子视图中重定向。
您可以返回RedirectToAction
。
答案 2 :(得分:5)
而不是
@Html.Action("Menu", "Navigation")
使用
@Url.Action("Menu", "Navigation")
为我工作:)
答案 3 :(得分:1)
我和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]
答案 4 :(得分:0)
这样重定向
string returnUrl = Request.UrlReferrer.AbsoluteUri;
return Redirect(returnUrl);
代替
return redirect("Action","Controller")
答案 5 :(得分:0)
删除[NoDirectAccess]批注(如果已添加到控制器中)。
和控制器中的部分视图
返回PartialView()而不是返回View()
答案 6 :(得分:0)
这种情况发生在 Html.Action 调用的 Action 执行重定向的情况下,例如
return RedirectToAction("Error", "Home");
而不是返回所需的 partialView
所以解决方案是删除重定向。