2009-07-22 22 views
1

我有以下情形:C#ASP.NET MVC:動態查詢字符串搜索

1)電話號碼簿表

2)通過表(名字搜索的多種方式,姓氏)

3)還有強制性尋呼(頁面大小和頁號)以及排序

當用戶訪問該頁面的第一URL是簡單地/電話簿。現在,假設用戶正在搜索「abc」,那麼網址將變爲/電話簿?q = abc。然後他按照名字排序,並且URL應該變成/電話簿?q = abc & sort = firstName & order = asc

我遇到的問題是如何編程我的視圖自動追加/修改查詢字符串,以便它仍然包含以前輸入的約束(如在我的「abc」)查詢,但調整/添加新的約束,例如,如果排序,然後使用分頁等?

我討厭使用JS併爲此重寫位置,而是讓頁面在每次對我的頁面上的每個排序/頁面/過濾器鏈接進行回發後生成實際錨點(a href)。

欣賞你的時間鄉親:)

+0

更新了一些例子給你 – 2009-07-22 21:05:16

回答

1

我假設你在頁面上有一些控件來設置什麼將被排序,按什麼順序,顯然是一種方法來定義什麼將被過濾?

加載頁面時,爲什麼不在視圖中設置這些值,然後控制器應該在下次加載時正確更新?這樣用戶就可以很容易地更改它們,而無需觸摸URL。在這種情況下,它是直線前進從控制器到視圖傳遞數據和設定值,就像任何其他的控制,比如:

<input type="text" name="search" value="<%= (string)ViewData["Search"] %>" /> 

如果你真的需要它的URL,可以修改通過以匿名類型傳遞額外參數來實現按鈕。

中的鏈接是這樣的:

<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %> 

對於形式(因爲你不專門設置一個提交按鈕)這樣的事情

<% using (Html.BeginForm(new {order="asc"}) { 

你可以拉那些從控制器通過做類似

<% using (Html.BeginForm(new { sort=(string)ViewData["Sort Order"] })) 
+0

你可以添加一個例子請問?謝謝 :) – Alex 2009-07-22 20:28:53

1

只是通過與一個匿名對象額外的參數:

<%= Html.ActionLink("Sort ascending", "Search", "PhoneBook", new {order="asc"}) %> 
<!-- or --> 
<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %> 

如果額外參數沒有在路由中定義,它們將作爲查詢字符串。