应用程序入口点 - 不允许子操作执行重定向操作

时间:2013-10-25 11:22:32

标签: asp.net-mvc asp.net-mvc-3 razor

我家控制器上的索引操作是我的MVC 3应用程序的入口点。当我尝试从此操作中重定向到另一个视图时,我的布局视图上的Html.Action上的“不允许子操作执行重定向操作”错误。我没有从子视图重定向,所以任何人都可以解释为什么我收到此错误。这只发生在我的家庭控制器的索引操作,任何其他控制器上的任何其他操作,包括家庭控制器工作正常。

家庭控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        if ([some logic to lookup user] = 0)
            return View("UserNotFound");
        else
            return view();
    }
}

布局中的@ Html.Action:

@Html.Action("BuildMenu", "Menu", new { menu = @ViewBag.Menu })

的Global.asax:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

菜单控制器:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
[ChildActionOnly]
public ActionResult BuildMenu(string menu)
{
    var model = new ViewModels.MenuViewModel()
    {  
        Menu = menu,
        ShowCreateNew = BL.Permissions.CheckUserPermission(this.UserDetails.UserId, this.UserDetails.RoleId, BL.Common.permission_AddNewRisk),
        ShowAdmin = BL.Permissions.CheckUserPermission(this.UserDetails.UserId, this.UserDetails.RoleId, BL.Common.permission_AdminRights)
    };

    return PartialView("_Menu", model);
}

1 个答案:

答案 0 :(得分:3)

BuildMenu控制器的Menu操作中是否存在重定向,仅在未找到用户时才会发生?

这会导致此错误,因为这是引用的子操作。

我刚刚测试了这个并得到了错误:

Child actions are not allowed to perform redirect actions

如果this.UserDetails值为null,基于主索引中的条件我假设是可能的,那么这将导致可能被包含重定向的全局应用属性捕获的异常。

我也测试了这个并得到了同样的错误。