0

我有以下问题:在我的 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 而不考虑原始控制器的命名空间。

我能以某种方式完成这项工作吗?

谢谢

4

1 回答 1

2

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

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

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

于 2013-08-29T09:56:11.170 回答