2013-02-15 61 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调用加载到第二个方法的搜索结果页面的结果部分。