MVC领域:我应该如何映射我的路线?

时间:2012-09-18 17:09:04

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-3-areas

我想组织我的解决方案并且我查看了区域,但似乎是:' ControllerName '的请求找到了以下匹配的控制器...... 错误是成名。

我添加了Admin区域,我项目的文件夹结构如下所示:

    • 管理
      • 控制器
      • 的HomeController
    • AdminAreaRegistration.cs
  • 控制器
    • 的HomeController

在我的AdminAreaRegistration文件中,我有:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

我在注册路线时这样做:

routes.MapRoute(
    "Home", 
    "Home/Index", 
    new { controller = "Home", action = "Index" }
);

我已在Application_Start方法上阅读here来执行此操作:

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

可悲的是,它没有修复错误。然后我读了here以在RegisterRoutes方法中添加默认(根)控制器的命名空间。

我知道区域都是关于路由的,只需要文件夹,但它们很有用。

我想知道在这种情况下如何将路线映射到特定的HomeController,一个位于X.Web.Controllers,另一个位于X.Web.Areas.Admin.Controllers。另外,我想知道是否可以使用@Html.RouteLink帮助程序而不是ActionLink生成链接,因为在所有中我到目前为止读到的示例链接正在使用ActionLink方法生成...这让我怀疑。

我将非常感谢您提供的任何帮助/指导。感谢。

1 个答案:

答案 0 :(得分:1)

我偶然发现了一个类似的问题,因为我找不到一个“干净”的解决方案,我最终重命名了一个HomeControllers - 这应该会有所帮助。

至于链接 - 是的,可以生成它们,你需要将区域名称添加到其中一个参数(routeValues),所以:

@Html.ActionLink("link text", "ActionName", "ControllerName", new { area = "Admin" })