2016-03-08 257 views
1

我有一個挑戰,找出動態定義基於層次結構的路由的最佳方法。ASP.NET MVC 5動態控制器路由

我期待實現類似於下面的數據庫驅動的鏈接:

/Illinois/ 
/Illinois/Chicago/ 
/Illinois/Chicago/Id 
/California/ 
/California/Los-Angeles/ 
/California/Los-Angeles/Id 
/New-York/ 
/New-York/New-York-City/ 
/New-York/New-York-City/Id 

等等,我不希望有定義每個狀態的控制,但我不是100 %,如果它是「正確的方式」。

+0

除了這些你是否也希望有像'{controller}/{action}'這樣的路線,例如'/ Home/Index'?因爲那時你需要在解析路徑時點擊數據庫,以便知道'Home'不是美國的一個州,'Index'不是一個城市。 –

+0

[MVC自定義路由中的多個級別]的可能的重複(http://stackoverflow.com/questions/31934144/multiple-levels-in-mvc-custom-routing) – NightOwl888

+0

你顯示的url不會自己工作,假設你在你的應用中有其他控制器。你需要一些識別前綴,比如'/ Locations/Illinois','/ Locations/California/Los-Angeles /'等等,然後你需要一個LocationsController來處理上述所有內容 –

回答

1

您可以像HomeController創建一個控制器,並在此控制器的頂部和相關的行動,隱藏路徑URL並打電話給你的位置和IDS的路線是這樣使用的路徑屬性:

[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    Route("{state?}/{city?}/{id?}") 
    public ActionResult Index(string state, string city, int id) 
    { 
     //your codes 
     return View(); 
    } 
} 
+0

謝謝,這很好用 – Stephen

+0

檢查對於answare,這是真的 – Mostafa

+0

看起來我可能已經跳過了這個槍的槍。我在使用上述方法獲取傳統路線時遇到了問題。有沒有辦法讓我有一個可接受的狀態列表?我寧願不必全部列出,但我可以爲州和市電話。或者,有沒有辦法讓我排除一些東西?在這種情況下,我發佈到「/ Lead」,但它正在尋找數據庫中的領先者。否則,我會收到一個錯誤消息,「找到與網址匹配的多個控制器類型」 – Stephen