Html.Action忽略原始控制器的命名空间

时间:2013-08-29 09:46:48

标签: c# asp.net-mvc model-view-controller controller namespaces

我有以下问题: 在我的MVC项目中,我有更多具有相同名称但名称空间不同的控制器

  • Web.Controllers.HomeController
  • Web.Controllers.CustomerController
  • Admin.Controllers.HomeController
  • Admin.Controllers.CustomerController

到目前为止我唯一的路线是:

var DefaultRoute = routes.MapLocalizedRoute("default",
                            "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                      new[] {"Admin.Controllers"});
DefaultRoute.DataTokens["UseNamespaceFallback"] = true;

默认回退:

ControllerBuilder.Current.DefaultNamespaces.Clear();
ControllerBuilder.Current.DefaultNamespaces.Add("Web.Controllers");

意图尝试始终使用命名空间Admin的控制器,如果控制器尚未实现但位于名称空间Web中,那么请执行此操作。 哪个有效,但问题出在

@HTML.Action("Login","Customer");

显然总是使Web.Controllers忽略原始控制器的命名空间。

我能以某种方式做到这一点吗?

由于

1 个答案:

答案 0 :(得分:2)

通过查看您的问题,看起来Web控制器是主控制器(共享),管理控制器位于某个区域内。

要将Html.Action带到区域内的控制器,您需要明确指定区域名称

喜欢@Html.Action("Login", "Customer", new { area = "Admin" })