0

我正在编写一个新的 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/关于

http://localhost /finance/Home/Contact

http://localhost /finance/首页/关于

http://localhost /marketing/Home/Contact

http://localhost /marketing/首页/关于

而不是默认页面:

http://localhost/Home/关于 http://localhost/Home/Contact

4

2 回答 2

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]" }
于 2012-08-23T21:37:38.770 回答
0

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

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

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

   public ViewResult Index(string department) {
      ViewBag.Department = department;
      return View();
   }
于 2012-08-23T22:05:36.253 回答