【问题标题】:Html.Action ignoring namespace from original controllerHtml.Action 忽略来自原始控制器的命名空间
【发布时间】:2013-09-01 16:25:34
【问题描述】:

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

我能做到吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。因此,我发现您还可以添加:new {area = "" } 以指定路由转到具有相同名称的无区域控制器。
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2015-02-18
    • 2015-05-01
    相关资源
    最近更新 更多