【问题标题】:MVC Areas RoutingMVC 区域路由
【发布时间】:2015-04-09 14:12:28
【问题描述】:

我有一个 MVC 应用程序如下:

Application
 Controllers
      HomeController
           ActionResult Index();
 Areas
      IT
           Controllers
                ITHomeController
                     ActionResult Index();

我已设置链接以在主应用程序和 IT 区域之间正常工作。

在 URL 中,指向 IT 区域的链接显示为 http://localhost/IT/ITHome。 链接代码为:

@Html.ActionLink("IT Page","Index","ITHome", new { area = "IT" }, null)

我的网址怎么可能只是http://localhost/IT 我敢肯定这很简单。

谢谢!

【问题讨论】:

  • 您需要更改已注册的路由映射,例如如果区域与IT 匹配,则添加一条以ITHOME 作为默认控制器的新路由。你能显示你的 RouteConfig.cs 吗?
  • 你应该调用控制器Home而不是ITHome
  • @jumpingcode 它应该在家的原因是什么?改变它的想法是,当我打开多个标签时,我知道我会点击哪个家庭控制器。
  • 您已经定义了一个区域IT,这意味着所有路线都将以/it/ 开头。然后定义了一个名为 ITHome 的控制器,默认情况下,它将路由 /it/ithome/

标签: c# asp.net-mvc razor html-helper asp.net-mvc-areas


【解决方案1】:
  1. 查找 /Areas/IT/ITareasRegistration.cs
  2. 在其public override void RegisterArea(AreaRegistrationContext context) 方法中添加路线映射,最好在最顶部或至少在该区域的默认路线之前。

类似:

context.MapRoute(
                "default_IT",
                "IT",
                new { action = "Index", controller = "ITHome" },
                new[] { "YourAppNamespaceHere.Areas.IT.Controllers" }
            );
  1. 至于链接...我只需将其编码到 <a href="/IT">IT Home</a> 并完成它,除非您将其作为来自 wwwroot 的子应用程序托管,否则应该没问题。

通过这种方式,您可以将区域路线与正常路线分开。

【讨论】:

    【解决方案2】:

    ITHomeController 重命名为HomeController 可能会导致匹配不明确。

    您可以更改已注册的路由映射,例如如果区域匹配IT,则添加一条以ITHOME 作为默认控制器的新路由。

    routes.MapRoute(
           "ITHome",
           "IT/{controller}/{action}/{id}",
           new { area = "IT", controller = "ITHome", action = "Index", id = UrlParameter.Optional }
    );
    

    然后,对于IT 区域,它将允许默认控制器成为您的ITHomeController

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2011-08-07
      • 2012-08-30
      • 2010-12-09
      • 2018-05-31
      • 2011-03-17
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多