C# MVC 3.0地图路线编码

C# MVC 3.0地图路线编码,c#,asp.net-mvc-3,asp.net-mvc-routing,maproute,C#,Asp.net Mvc 3,Asp.net Mvc Routing,Maproute,我正在编写一个新的MVC应用程序;我想对路由进行一些更改,以便将部门名称添加到URL 以下是VS 2012生成的内容 routes.IgnoreRoute("{resource}.axd/{*pathInfo}") routes.MapRoute( _ name:="Default", _ url:="{controller}/{action}/{id}", _ defa

我正在编写一个新的MVC应用程序;我想对路由进行一些更改,以便将部门名称添加到URL

以下是VS 2012生成的内容

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

    routes.MapRoute( _
        name:="Default", _
        url:="{controller}/{action}/{id}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )
我想在路径的开头传递部门名称。 前

http://localhost:/hr/Home/Contact

http://localhost/hr/Home/About

http://localhost/finance/Home/Contact

http://localhost/finance/Home/About

http://localhost/marketing/Home/Contact

http://localhost/marketing/Home/About

而不是默认页面:

http://localhost/Home/About http://localhost/Home/Contact


这应该是非常直截了当的;将
部门
添加到路线起点:

routes.MapRoute( _
    name:="DepartmentRoute", _
    url:="{department}/{controller}/{action}/{id}", _
    defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
)
您可能还需要添加一个约束,以确保它仅与部门名称匹配:

    constraints:=New With { .department = @"[hr|finance|marketing]" }

有两种方法可以访问URL中的部门名称。一种方法是使用RouteData属性。值如下:

string department = RouteData.Values["department"];
另一种方式更优雅。如果我们使用与URL模式变量匹配的名称为action方法定义参数,MVC框架将把从URL获得的值作为参数传递给action方法

   public ViewResult Index(string department) {
      ViewBag.Department = department;
      return View();
   }

谢谢你的快速回复。如何在代码中获取部门名称?它使用相同的代码对吗?@user1621009是的,您可以将其作为参数添加到您的操作方法中。。。或者直接从Route Values对象检索它。DarthVader的建议也是一个很好的考虑。谢谢你这么快的反应。我想你解决了我的问题。