2013-02-15 60 views
0

我正在構建一個MVC應用程序,它將在屏幕上顯示一些數據。我可能最終擁有數百甚至數千數據。MVC - 分頁列表:通過文本框,複選框和下拉列表保存我的所有值

所以我使用了一個PagedList格式以下這個教程:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

這幫助了我。分頁列表工作。但我有一個問題,我似乎無法弄清楚如何解決。在本教程中,只有1個參數,一個文本框,並且教程通過保留和歸屬ViewBag參數來保持值「在內存中」,以便更改頁面不會「刷新」文本框中的文本。

現在我正在構建一個搜索引擎,現在有23個參數和計數。這些參數包括複選框,文本框和下拉列表。

我的問題:有沒有什麼方法可以將這些保存在內存中?我該如何繼續?我必須像教程一樣將它們全部留在記憶中嗎?

非常感謝!

回答

0

那麼,在教程中,他們並沒有真正「保存在內存」之間的請求。在每個請求中,該值都傳遞給action方法,然後將其傳遞給視圖,並在該方法中用於創建分頁和排序鏈接。

以前,尋呼,而不是單獨地將每個參數時,我只是有讀取查詢字符串和使用每個提供參數建立的鏈路的方法:

NameValueCollection queryString = helper.ViewContext.HttpContext.Request.QueryString; 

foreach (string key in queryString) 
{ 
    if (key != null) 
    { 
     if (!newValues.ContainsKey(key)) 
     { 
      if (!string.IsNullOrEmpty(queryString[key])) 
      { 
       newValues[key] = queryString[key]; 
      } 
     } 
    } 
} 

然後,創建鏈接,我使用:

  string link; 

      if (!string.IsNullOrEmpty(routeName)) 
      { 
       link = helper.RouteLink(text, routeName, newValues).ToString(); 
      } 
      else 
      { 
       actionName = actionName ?? values["action"].ToString(); 
       controllerName = controllerName ?? values["controller"].ToString(); 

       link = helper.ActionLink(text, actionName, controllerName, newValues, null).ToString(); 
      } 

      return string.Concat(" ", link); 
0

如果您使用的是AJAX技術,那麼您可以在控制器中創建2個操作方法。

第一個應該返回整個視圖,第二個應該返回一個局部視圖。

第一個將包含您的搜索控件(全部23個)。這些將僅在第一次提供。

第二個將返回部分視圖,並將由您對搜索查詢具有的23個奇數參數進行參數化。將它們全部放在ViewModel類中並讓默認模型綁定器在運行時綁定它可能是一個想法。

最後,您可以使用JavaScript/jQuery將AJAX調用加載到第二個方法的搜索結果頁面的結果部分。