2009-11-02 126 views
4

我有一種情況,我找不到通過我在這裏搜索的解決方案。這裏是場景:用asp.net尋呼搜索結果MVC

我有一個搜索表單2個必填字段和多個可選的。將表單發佈到確定選擇哪些字段的操作方法,並生成符合搜索條件的對象的列表<>。然後,我將該列表<>傳遞給該視圖進行顯示。

我遇到的這個問題涉及如何使用asp.net mvc進行分頁。對於過去的項目,我使用了一個自定義的Html幫助器來創建包含查詢參數以及「頁面」參數的鏈接。然後它使用GET請求和.Take()。Skip()格式。

我在這個項目上遇到了一堵牆,因爲我無法使用GET請求作爲搜索條件,我也無法找到一種方法來保持內存中的列表<>執行通常的「頁面」參數技巧。

我想過在會話中存儲列表<>,但對象和列表可能非常大。

我認爲這是一個流行的高級搜索形式的問題,但我似乎無法找到一個好的解決方案。任何幫助,將不勝感激。謝謝!

+0

爲什麼不寫一個助手或擴展來做分頁,並在你的視圖中使用它呢?,我只是從我的頭頂開始說話。謝謝 – 2009-11-02 21:11:29

回答

3

找到如何cacheing搜索結果對象,並給它一個獨特的密鑰。然後,您將使您的分頁鏈接引用唯一的(SearchID),並讓您的操作查找該對象,將其從緩存中取出並跳過/取出。

這不會爲每個請求重建對象,加快頁面加載速度並減少數據庫/應用程序的負擔。

這是一個關於cacheing文章:

http://aspnet.4guysfromrolla.com/articles/100902-1.aspx

這是一個關於cacheing視頻:

http://www.asp.net/learn/Videos/video-6206.aspx

注意:確保你的緩存對象上指定到期日。

+0

非常有幫助的鏈接,謝謝! – 2009-11-03 22:05:57

+0

我不認爲這是一個好方法 – Andrei 2013-06-13 09:14:00

+0

@AndreiMikhalevich當你不想重新查詢你的數據源時,有更好的方法嗎? – Alexandra 2013-10-04 05:19:07

1

將所有內容放在同一個表單中:必填字段,可選字段和頁面鏈接。

兩種可能性:

  1. 使用提交按鈕或圖像,而不是錨標籤的頁面鏈接各自具有不同的名稱(例如page1page2,...):這將讓你得到所需的提交表單時的頁面。
  2. 在表單中放置隱藏字段。然後爲任何頁面錨點添加一個JavaScript點擊處理程序。該處理程序將更新頁面隱藏字段的值,提交表單並取消事件。

因此,單擊任何尋呼機鏈接將提交表單與您需要建立列表和尋呼機鏈接的所有數據。

+0

我擁有同樣形式的所有東西。在我的操作方法中,我使所有可選參數爲空,並對必填字段進行一些簡單的驗證。我也試圖避免整個重新提交每頁,因爲我用搜索條件過濾我的對象的邏輯非常重要。感謝您的迴應! – 2009-11-02 21:03:08

+0

那麼問題是什麼? – 2009-11-02 21:06:52

+1

問題是我需要能夠在不使用查詢字符串的情況下遍歷複雜對象的列表,並在每次請求新頁面時重新構建列表。不知道是否有可能。 – 2009-11-02 21:40:58

2

如果我理解正確,您只需要加載搜索結果一次,然後通過它們進行翻頁。

你看過任何jQuery的分頁功能嗎?您可以將整個列表轉儲到頁面,並使用JavaScript處理分頁(如果需要,也可以進行排序)。

一個例子可以在http://beckelman.net/demos/jqueryTableSorterConPaging/default.aspx

+0

謝謝,這可能是我要去的方向。只是好奇,但如果沒有JavaScript可能嗎? – 2009-11-02 21:44:48

+2

如果您不想使用JavaScript,則需要使用某種緩存(如其他答案中所述),並將頁面更改傳達給服務器。由於您希望避免GET,因此您可以將分頁鏈接包裝在表單和POST中,然後在原始搜索中運行.Take()。Skip()緩存。 – 2009-11-03 02:35:20