MVC页面列表:通过文本框、复选框和下拉列表将我的所有值保存在内存中

本文关键字:我的 下拉列表 内存 存在 保存 复选框 列表 文本 MVC | 更新日期: 2023-09-27 17:59:27

我正在构建一个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

这对我有帮助。分页列表有效。但我有一个问题似乎不知道该怎么解决。在本教程中,只有一个参数,一个文本框,本教程通过保留ViewBag参数并赋予其属性来保持值"在内存中",这样更改页面就不会"刷新"文本框中的文本。

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

我的问题是:有没有办法把这些留在记忆中?我该如何处理?我必须像教程一样把它们都记在记忆中吗?

非常感谢!

MVC页面列表:通过文本框、复选框和下拉列表将我的所有值保存在内存中

在本教程中,它们在请求之间并没有真正"保存在内存中"。在每个请求中,值都被传递到action方法中,然后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);

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

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

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

第二个将返回局部视图,并将由搜索查询中的23个奇数参数参数化。将它们全部放入ViewModel类中,并让默认的模型绑定器在运行时将其绑定,这可能是一个不错的想法。

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