如何在MVC 3 URL Route中获取City State Zip,而无需为每个城市的每个州和行动编写控制器

时间:2012-05-30 22:38:48

标签: asp.net-mvc-3 routes url-mapping

我需要让我的老板应用程序中的网址如下:

http://domain.com/Texas/Dallas/72701

但是,我不想为每个城市编写控制器,也不想为每个城市编写动作。

routes.MapRoute(
"DrillDown", // Route name
"{controller}/{action}/{ZipId}", 
new { controller = "State", action = "City", ZipId = UrlParameter.Optional} // Parameter     defaults

有人可以帮我写一个接受State / City / Zip路线的模式而不破坏我有控制器/ Action / Param的常规路线的能力吗?

全神贯注,无法找到任何方向。

2 个答案:

答案 0 :(得分:1)

如果您能够在域路径中再添加一个路径段,则可以非常轻松地使用

routes.MapRoute(
"DrillDown", // Route name
"Location/{State}/{City}/{ZipId}", 
new { controller = "Location",
      action = "DrillDownAction", 
      State= UrlParameter.Optional, 
      City = UrlParameter.Optional,
      ZipId = UrlParameter.Optional
}

哪个会为您提供以下格式的网址:http://www.domain.com/Location/ {State} / {City} / {ZipId}

答案 1 :(得分:0)

这可以通过为每个州添加路线来实现:

routes.MapRoute( 
"TexasDrillDown", // Route name 
"Texas/{City}/{ZipId}",  
new { controller = "DrillDownController", action = "DrillDownAction", ZipId = UrlParameter.Optional});

但是,如果您拥有的控制器少于状态,您可能更愿意将DrillDown设置为默认路由并手动映射其他控制器,如下所示:

routes.MapRoute( 
"Users", // Route name 
"Users/{action}/{id}",  
new { controller = "Users", id= UrlParameter.Optional});

routes.MapRoute( 
"DrillDown", // Route name 
"{State}/{City}/{ZipId}",  
new { controller = "DrillDownController", action = "DrillDownAction", ZipId = UrlParameter.Optional});