【问题标题】:MVC 3.0 Maproute CodingMVC 3.0 地图路由编码
【发布时间】:2012-08-23 21:32:25
【问题描述】:

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

http://localhost/marketing/Home/Contact

http://localhost/marketing/Home/关于

代替默认页面:

http://localhost /Home/关于 http://localhost /Home/联系方式

【问题讨论】:

    标签: c# asp.net-mvc-3 asp.net-mvc-routing maproute


    【解决方案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]" }
    

    【讨论】:

    • 感谢您的快速回复。如何在我的代码中获取部门名称?它使用相同的代码对吗?
    • @user1621009 是的,您可以将它作为参数添加到您的操作方法中......或者直接从 Route Values 对象中检索它。 DarthVader 的建议也值得考虑。
    • 感谢您的快速回复。我想你解决了我的问题。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多