所以我們可以說我已經爲我的很酷的新ASP.NET MVC應用程序定義了以下兩條路線:URL路由採用相同的模式,但不同的命名片段
{controller}/{action}/{id}
{controller}/{action}/{page}
兩個除了最後一個命名段以外,路線具有相同的確切模式。最後命名的片段也是可選的 - 在這個例子中不清楚,但認爲它們是可選的。
如果我加入我列出了他們的框架的RouteCollection
訂單的路線,第一路線會一直匹配的網址是這樣的:/Home/Index/1
通常這不是一個問題,但ASP.NET MVC的默認模型綁定當將參數作爲參數傳遞給動作時,要求動作的參數與路由模式中的命名片段具有相同的名稱。
因此,對於例如一個動作List
,在這裏我想拉的機型列表,以傳遞給視圖,它接受一個頁碼作爲參數,我需要命名參數ID。通常情況下,這不是一個問題,但我是一個詳細的人,我喜歡我的參數名稱來指示參數用於什麼。
但是由於模型綁定器在路由系統之後進入,所以我很失敗。還是我?有沒有辦法解決這個問題,而不寫我自己的模型綁定器,或者更糟的是,我自己的路由器?
另外,這可以被認爲是第二個相關的問題,我如何確保路由命名段是重構安全的?
使用Url.Action
,例如,在我的觀點是鼓勵,因爲他們考慮到路線。但是在使用此方法生成URL時傳遞參數時,通常必須傳入一個匿名對象,其名稱也等於指定段的屬性。
所以,如果我在我的路線中重命名段,我實際上必須去我所有的視圖,並重命名該屬性。這聽起來並不理想。那麼幹淨的解決方法是什麼?
你需要類似''/{id}".Where(id是整數)'或類似的東西。我很確定ASP.Net MVC不支持。 (很高興在我自己的簡約路由器中知道這個功能很有用) – Earlz
@Earlz我很確定我可以向路由添加一個REGEX約束來確保指定的段是一個整數。但在我的例子中這是沒有意義的,因爲'{id}'和'{page}'應該可以是整數。 – 9ee1
啊,我明白了。我現在明白你的問題了(我的路由器仍然處理它,但不會在MVC中工作)。所以你基本上想要某些'行動'解決頁碼和其他人解決id? – Earlz