2013-10-25 108 views
1

我的主控制器上的索引操作是我的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); 
} 
+2

请问您可以把'BuildMenu'和'UserNotFound'操作方法的代码? – Haritha

+0

重定向应发生在控制器操作本身中,而不是从视图中调用的另一个操作中。也许你想用'RedirectToAction(“UserNotFound”)来代替渲染另一个视图。 –

+0

嗨,该视图只是显示错误消息的共享文件夹的空白视图。重定向确实发生在控制器中。 – Wilky

回答

3

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

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

我刚才测试正是这一点,并得到了错误:

Child actions are not allowed to perform redirect actions

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

我测试了这一点,并得到了同样的错误。

+0

不,请参阅我已添加菜单控制器代码的更新位置 – Wilky

+1

@Wilky您是否应用了全局属性来对异常进行重定向?基本上,内部(或应用于)正在执行重定向的操作。 –

+0

@Wilky更新回答,希望对您有所帮助。 –