2010-02-14 24 views
3

想想New Egg's電子商務追溯模型以啓動,其中導航欄上的關鍵字鏈接會進一步限制當前顯示的每個選擇的產品列表。使用ASP.NET MVC2,如何使過濾器使用hackable url?

我設置一個房子取景器以及路線是這樣的:

http://{website.com}/{Housetype}/{PriceLow}-{PriceHigh} 
http://mysite.com/Residential/180000-230000 
http://mysite.com/Commercial/300000-500000 

但現在我想補充的側面導航鏈接,進一步限制內容:

1 Bedroom 
2 Bedroom 
4 Bedroom 

1-4 Acres 
4-10 Acres 
10+ Acres 

我將如何傳遞和維護使用MVC進行點擊之間的選擇?我覺得我的選擇是:

  1. 保持在查詢字符串如/ {}畝添加一個名爲參數:{低} - {}高,但這將要求所有的參數存在,我就不能選擇多個條件,或者我點擊最大查詢字符串長度。
  2. 一旦我知道{housetype}和{price range},然後翻轉到一個完全不同的策略,可能會傳遞一個對象(如DTO),它會將.AddCriteria(「Acres」,「.gt。」,「1」 ); .AddCriteria(「Acres」,「.lt。」,「4」)等....這聽起來很複雜
  3. 還有其他的東西嗎?

同樣,尋找初學者答案,最常見的方式(幾乎設計模式方式)將過濾器和排序條件從客戶端發送到ASP.NET MVC。鏈接也有幫助。

回答

1

幾周前我構建了一個URL表達式解析器,它將根據URL中的表達式過濾IQueriable。 Here's a blog post for the explanation。基本上,你可以建立你自己的表達式並將它們插入解析器......或者你可以用類似/ price-greaterthan-3/price-lessthan-4000 /畝-lesthan-10/

Here's a link to the code

+0

路由定義是什麼樣的?他們是否必須按照特定的順序?當他們不在時會發生什麼? – 2010-02-14 18:07:35

+0

基本上你需要一個「全部通過」路線,將所有的表達式拉到你的URL結尾。它應該先走......或者至少在默認路線之前。 http://snipt.org/vmV – zowens 2010-02-16 14:38:54