我有一个包含两个区域和一个根区域的 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 中显示区域名称?
我知道这个问题与其他已经记录在案的问题相似,但我已经对这些问题进行了搜索,但无济于事,而且目前效率低下,所以我想我会尝试具体询问。谢谢。