【问题标题】:MVC - Paged List: keeping all my values in memory with textbox, checkbox and dropdown listsMVC - 分页列表:使用文本框、复选框和下拉列表将我的所有值保存在内存中
【发布时间】:2013-02-15 16:32:03
【问题描述】:
【问题讨论】:
标签:
c#
asp.net-mvc
pagedlist
【解决方案1】:
嗯,在本教程中,它们在请求之间并没有真正“保存在内存中”。在每个请求中,该值被传递给 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);
【解决方案2】:
如果您使用 AJAX 技术,那么您可以在控制器中创建 2 个操作方法。
第一个应该返回整个视图,第二个应该返回部分视图。
第一个将包含您的搜索控件(全部 23 个)。这些只会在第一次呈现。
第二个将返回部分视图,并将由您对搜索查询拥有的 23 个奇数参数进行参数化。将它们全部填充到 ViewModel 类中并让默认模型绑定器在运行时绑定它可能是一个想法。
最后,您可以通过 AJAX 调用使用 JavaScript/jQuery 的第二个方法来加载搜索结果页面的结果部分。