2012-10-31 40 views
0

所以我們可以說我已經爲我的很酷的新ASP.NET MVC應用程序定義了以下兩條路線:URL路由採用相同的模式,但不同的命名片段

  • {controller}/{action}/{id}
  • {controller}/{action}/{page}

兩個除了最後一個命名段以外,路線具有相同的確切模式。最後命名的片段也是可選的 - 在這個例子中不清楚,但認爲它們是可選的。

如果我加入我列出了他們的框架的RouteCollection訂單的路線,第一路線會一直匹配的網址是這樣的:/Home/Index/1

通常這不是一個問題,但ASP.NET MVC的默認模型綁定當將參數作爲參數傳遞給動作時,要求動作的參數與路由模式中的命名片段具有相同的名稱。

因此,對於例如一個動作List,在這裏我想拉的機型列表,以傳遞給視圖,它接受一個頁碼作爲參數,我需要命名參數ID。通常情況下,這不是一個問題,但我是一個詳細的人,我喜歡我的參數名稱來指示參數用於什麼。

但是由於模型綁定器在路由系統之後進入,所以我很失敗。還是我?有沒有辦法解決這個問題,而不寫我自己的模型綁定器,或者更糟的是,我自己的路由器?

另外,這可以被認爲是第二個相關的問題,我如何確保路由命名段是重構安全的?

使用Url.Action,例如,在我的觀點是鼓勵,因爲他們考慮到路線。但是在使用此方法生成URL時傳遞參數時,通常必須傳入一個匿名對象,其名稱也等於指定段的屬性。

所以,如果我在我的路線中重命名段,我實際上必須去我所有的視圖,並重命名該屬性。這聽起來並不理想。那麼幹淨的解決方法是什麼?

+0

你需要類似''/{id}".Where(id是整數)'或類似的東西。我很確定ASP.Net MVC不支持。 (很高興在我自己的簡約路由器中知道這個功能很有用) – Earlz

+0

@Earlz我很確定我可以向路由添加一個REGEX約束來確保指定的段是一個整數。但在我的例子中這是沒有意義的,因爲'{id}'和'{page}'應該可以是整數。 – 9ee1

+0

啊,我明白了。我現在明白你的問題了(我的路由器仍然處理它,但不會在MVC中工作)。所以你基本上想要某些'行動'解決頁碼和其他人解決id? – Earlz

回答

1

在傳入的請求上,RouteCollection將選擇正則表達式邏輯匹配的第一個Route

不幸的是,我確實認爲你在如此高層次的觀點上運氣不佳。

但是,如果您放入某種限制,您可能會擺動以匹配第二條路線。

+0

好吧,我給了它一個鏡頭,等待看看其他人是否有意見。看起來我就像你說的那樣,在這方面運氣不好。我會繼續探索它,但現在我會將其標記爲正確的答案。謝謝你的幫助。 – 9ee1

相關問題