2010-09-06 245 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