0

我正在使用帶有Razor的ASP.NET MVC3,並且想要定義一個允許我接收這樣的URL的路由。請注意,我在新的MVC3:如何在這種情況下使用兩個參數定義路線?

/State/Florida/Town/Fort_Lauderdale 
/State/Texas/Town/Irvine 
/State/Alabama/Town/Auburn 

我會使用「城」的行動,比如,要由現有的「國」控制器(StatesController類)來處理。我有這樣的事情:

routes.MapRoute(
    "Towns", 
    "{controller}/{state}/{action}/{town}", 
    new { controller = "States", action = "Town", state= UrlParameter.Optional, town = UrlParameter.Optional } 

很明顯,州和鎮的參數都不是可選的,我該怎麼做呢?我不認爲上述路線是正確的,是不是有辦法表明該參數不是可選的?

這裏的另一個情況是,雖然上面我假裝在控制器鎮(弦鎮)用一個單獨的動作來處理城鎮,但我仍然需要能夠用剃刀解析個別城鎮文件。我原本以爲使用Town()控制器方法來使用城鎮參數來服務城鎮的HTML文件,但事實證明,我也希望能夠在城鎮描述中獲得動態數據。這是否意味着我的最佳解決方案是創建一個專門的城鎮控制器併爲每個城鎮創建一個行動方法?

任何建議,以更好地處理?

回答

1

只需卸下UrlParameter.Optional

routes.MapRoute(
    "Towns", 
    "{controller}/{state}/{action}/{town}", 
    new { controller = "States", action = "Town" } 

我只想去一些更明確,如:

routes.MapRoute(
    "Towns", 
    "State/{state}/Town/{town}", 
    new { controller = "States", action = "Town" } 

事實上,有一個在前面的一個(一個錯字根據您發佈的一個),因爲控制器默認情況下是狀態,並且由url狀態。