对于区域,需要与正常路由配置类似的路由配置

时间:2012-10-07 21:46:20

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

我正在使用ASP.NET MVC3。我正在尝试配置我的路线,但似乎有相互矛盾的路线。不确定如何解决它,希望有人能指出我正确的方向。

我的网站上有2个部分可以查看应用程序。网站的普通用户只能查看他/她的应用程序。管理员可以查看使用管理区域捕获的所有应用程序。

Notes可以添加到现有的应用程序中。 Notes只是可以在应用程序过程中随时捕获的其他信息。我希望显示已经为这样的应用程序捕获的所有笔记:

/Application/1001/Notes
/Administration/Application/1001/Notes

这是我配置路线的方式:

Routes.MapRoute(
     "ApplicationNote",
     "{controller}/{applicationId}/Notes",
     new { controller = "Application", action = "Notes" },
     new { applicationId = @"\d+" },
     new[] { "MyProject.Web.Controllers" });

Routes.MapRoute(
     "AdminApplicationNote",
     "{area}/{controller}/{applicationId}/Notes",
     new { area = "Administration", controller = "Application", action = "Notes" },
     new { applicationId = @"\d+" },
     new[] { "MyProject.Web.Areas.Administration.Controllers" });

要显示第一个链接(数据表中每个应用程序旁边),我的控制器中会有以下内容为每条记录生成操作链接:

string actionLinks = string.Empty;
actionLinks += "<a href=\"" + Url.Action("Notes", "Application", new { area = string.Empty, applicationId = application.Id }) + "\">" + "Notes</a>";

我显示的第二个链接(来自我的控制器操作,与上面相同):

string actionLinks = string.Empty;
actionLinks = "<a href=\"" + Url.Action("Notes", new { applicationId = application.Id, area = "Administration", controller = "Application" }) + "\">" + "Notes</a>";

第一种配置效果很好:

/Application/1001/Notes

......但第二次不太好。当我将鼠标悬停在第二个配置的链接上时,状态显示:

/Administration/Application/Notes?applicationId=1001

管理区域的路由配置我做错了什么?

1 个答案:

答案 0 :(得分:0)

添加Constraint area = string.Empty

   routes.MapRoute(
        "ApplicationNote",
        "{controller}/{applicationId}/Notes",
        new { controller = "Application", action = "Notes" }, 
        new { applicationId = @"\d+", area = string.Empty }, //<----
        new[] { "MyProject.Web.Controllers" }
   );