【问题标题】:MVC - Paged List: keeping all my values in memory with textbox, checkbox and dropdown listsMVC - 分页列表:使用文本框、复选框和下拉列表将我的所有值保存在内存中
【发布时间】:2013-02-15 16:32:03
【问题描述】:

我正在构建一个 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 个参数并且还在不断增加。这些参数包括复选框、文本框和下拉列表。

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

非常感谢!

【问题讨论】:

    标签: 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 的第二个方法来加载搜索结果页面的结果部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2021-09-10
        • 1970-01-01
        相关资源
        最近更新 更多