MVC 3.0 Maproute编码

时间:2012-08-23 21:32:25

标签: 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}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )

我想在路径的开头传递部门名称。 恩。

  

http:// localhost:/ hr / Home /联系

     

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 /关于   http:// localhost / Home / Contact

2 个答案:

答案 0 :(得分:1)

那应该是非常直接的;将department添加到路径的开头:

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]" }

答案 1 :(得分:0)

一旦您在部门名称中访问部门名称,有两种方法可以访问部门名称。一种方法是使用像这样的属性RouteData.Values:

string department = RouteData.Values["department"];

另一种方式更优雅。如果我们使用与URL模式变量匹配的名称为我们的action方法定义参数,MVC框架会将从URL获取的值作为参数传递给action方法。

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