1

我有一个包含两个区域和一个根区域的 MVC3 应用程序。一般结构看起来像 Root

- Root/Areas/Manager
    * Views/Home/Index.cshtml
    * ManagerAreaRegistration.cs
- Root/Areas/Participant
    * Views/Home/Index.cshtml
    * ParticipantAreaRegistraion.cs
- Root
    * Views/Home/Index.cshtml
    * Views/Account/Register.cshtml
    * Global.asax.cs

我有两个路由问题。第一个是我无法导航到 Root/Views 文件夹中的任何页面,除了 Global.asax.cs 文件中设置为默认的页面。Global.asax.cs 文件如下所示:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new {controller="Home" , action = "Index", id = UrlParameter.Optional }, 
   new[] { "MVCApplication.Controllers" }    // for areas 
   );
...     
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
...

作为起始页的 Root/Views/Home/Index.cshtml 中的代码如下所示:

@Html.ActionLink("Accounts","Register", new {area="", controller="Accounts"},null)
@Html.ActionLink("Manager", "Index", new { area = "Manager", controller = "Home" })
@Html.ActionLink("Participant", "Index", new { area = "Participant", controller = "Home" })

这两个区域链接工作正常,因为我已将路由添加到每个区域的注册文件中,但是到根中的另一个页面 Accounts/Register 的链接给出了“找不到资源错误”。但是,如果我将 Global.asax.cs 路由更改为

    new {controller="Accounts" , action = "Register", id = UrlParameter.Optional }, 

在默认路由中,然后我可以从注册页面开始。

所以我的第一个问题是:如何使用路由来访问区域和根中的两个页面(即帐户/注册页面)?

我的第二个问题与这些地区本身有关。由于他们都有一个“家庭”控制器,我将区域名称放在一个前面以区分它,但我不想这样做。目前,'ParticipantAreaRegistration.cs 文件具有以下代码:

  context.MapRoute(
            "Participant_default",
            "Participant/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
          new[] { "MvcApplication.Areas.Participant.Controllers"  }    // for areas 
            );

它给出了“localhost* * /Participant/Home”的 URL

而 ManagerAreaRegistraion.cs 有代码

 context.MapRoute(
            "Manager_default",
            "{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
                         new[] { "MvcApplication.Areas.Manager.Controllers" }    // for areas 

        );

它给出了“localhost***/Home/”的 URL

我的第二个问题是:我怎样才能让经理和参与者(或任意数量的区域)的 URL 为“localhost**/Home”,而不必在 URL 中显示区域名称?

我知道这个问题与其他已经记录在案的问题相似,但我已经对这些问题进行了搜索,但无济于事,而且目前效率低下,所以我想我会尝试具体询问。谢谢。

4

1 回答 1

0

您可以使用自定义路由。

类似于这个的东西:

MVC 2 区域注册路由顺序

使用上述问题中的解决方案,您可以编写自定义的路由顺序。

在我的一个应用程序中,我有名为 Admin、Blog、Members 和 Public 的区域。我已将公共区域路由为 url: http://localhost:4000/,管理员为:http://localhost:4000/admin,博客为:http://localhost:4000/blog等。如果你想要我的代码,我可以给你。

于 2012-01-24T10:39:01.283 回答