0

我正在构建一个 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-应用程序

这对我有帮助。分页列表有效。但是我有一个问题,我似乎无法弄清楚如何解决。在本教程中,只有 1 个参数,一个文本框,本教程通过保留和归属 ViewBag 参数将值“保存在内存中”,这样更改页面就不会“刷新”文本框中的文本。

现在我正在构建一个类似搜索引擎的东西,现在有 23 个参数和计数。这些参数包括复选框、文本框和下拉列表。

我的问题:有什么办法可以将这些保存在内存中?我该如何进行?我必须像教程一样将它们全部保存在内存中吗?

非常感谢!

4

2 回答 2

0

如果您使用 AJAX 技术,那么您可以在控制器中创建 2 个操作方法。

第一个应该返回整个视图,第二个应该返回部分视图。

第一个将包含您的搜索控件(全部 23 个)。这些将仅在第一次呈现。

第二个将返回部分视图,并将由您对搜索查询拥有的 23 个奇数参数进行参数化。将它们全部填充到 ViewModel 类中并让默认模型绑定器在运行时绑定它可能是一个想法。

最后,您可以通过 AJAX 调用使用 JavaScript/jQuery 的第二个方法来加载搜索结果页面的结果部分。

于 2013-02-15T17:06:51.897 回答
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);
于 2013-02-15T17:05:48.797 回答