2010-09-06 160 views
0
routes.MapRoute("Archive.CityState", 
       "Archive/{City}/{State}/{OP1}/{OP2}", 
       new { controller = "Archive", action = "CityState", OP1 = UrlParameter.Optional, OP2 = UrlParameter.Optional }, 
       new { City="[a-zA-Z]+" ,State = @"[a-zA-Z]{2}", OP1 = @"[a-zA-Z]+" , OP2 [email protected]"\d{4}" }); 


public ActionResult CityState(string City, string State, string OP1, int OP2) 
     { 
      var x = City; 
      var y = State; 
      var OptionalParameter1= OP1; 
      var OptionalParameter2 = OP2; 
      return View(); 
     } 

这可以映射
存档/雷蒙/ WA /化学映射问题

存档/雷蒙/ WA /化学/ 2010

但不是

存档/ Remond/WA

任何人都可以帮忙吗?谢谢。

回答

0

这些约束防止它匹配你想要什么:

OP1 = @"[a-zA-Z]+", 
OP2 = @"\d{4}" 

因为需要两个参数。修改您的正则表达式以接受空值,如果您希望此路线能够与Archive/Remond/WA匹配。还要记住,只有最后参数可以是可选的(你不能有两个连续的可选参数,因为这没有意义)。

+0

谢谢。通过消除约束,问题立即消失。但是如果约束使参数需要,为什么Archive/Remond/WA/Chemistry与OP2 = @“\ d {4}”一起工作? – stoto 2010-09-06 18:02:08