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

Asp.net mvc 应用程序入口点-不允许子操作执行重定向操作,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,my home controller上的索引操作是我的MVC 3应用程序的入口点。当我尝试从此操作重定向到另一个视图时,我在布局视图的Html.action上收到“子操作不允许执行重定向操作”错误。我不是从子视图重定向,所以任何人都可以解释我为什么会出现此错误。这只发生在my home controller的索引操作上,任何其他控制器上的任何其他操作(包括home controller)都可以正常工作 家庭控制器: public class HomeController : Controller

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

家庭控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        if ([some logic to lookup user] = 0)
            return View("UserNotFound");
        else
            return view();
    }
}
[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);
}
@Html。布局中的操作:

@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
    );

}
菜单控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        if ([some logic to lookup user] = 0)
            return View("UserNotFound");
        else
            return view();
    }
}
[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);
}

菜单
控制器的
构建菜单
操作中是否存在仅在找不到用户时发生的重定向

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

我刚刚测试了这一点,得到了错误:

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

如果
this.UserDetails
值为null(基于我假设的主索引中的条件),则可能会导致异常,该异常可能被包含重定向的全局应用属性捕获


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

您可以为
BuildMenu
UserNotFound
操作方法添加代码吗?重定向应该在控制器操作本身中进行,而不是在从视图调用的另一个操作中进行。也许您想使用
重定向到操作(“UserNotFound”)
而不是呈现另一个视图。您好,该视图只是显示错误消息的共享文件夹中的一个空视图。重定向确实发生在控制器中。我已经包含了global.asax代码来显示如何达到索引操作。@Wilky您是否应用了一个全局属性来对异常进行重定向?基本上,该操作内部(或应用于)有某种东西正在进行重定向。@Wilky更新了答案,希望能有所帮助。是的。我的菜单控制器继承自_controllerbase,它执行一些错误处理和血腥的重定向。我怎么没看到呢。谢谢你,理查德!!