Asp.net mvc html表中的MVC分页

Asp.net mvc html表中的MVC分页,asp.net-mvc,Asp.net Mvc,我有一个带有搜索按钮的搜索表单。当用户输入所有搜索输入字段并按下搜索按钮时,将只返回同一页面中html表中前10条记录。我已经做了,直到今天 当用户按下下一页按钮时,我必须保留用户输入的值,并将其发送到数据库,然后获取下10条记录 当我按下搜索按钮(第一个http post)时,视图模型具有用户输入的所有值,但当我按下下一页按钮单击(第二个post)时,视图模型不保留用户在搜索输入字段中输入的值 有人建议我不要使用临时数据将值从一个操作传递到另一个操作。是否有其他方法可以做到这一点?您应该尝试使

我有一个带有搜索按钮的搜索表单。当用户输入所有搜索输入字段并按下搜索按钮时,将只返回同一页面中html表中前10条记录。我已经做了,直到今天

当用户按下下一页按钮时,我必须保留用户输入的值,并将其发送到数据库,然后获取下10条记录

当我按下搜索按钮(第一个http post)时,视图模型具有用户输入的所有值,但当我按下下一页按钮单击(第二个post)时,视图模型不保留用户在搜索输入字段中输入的值


有人建议我不要使用临时数据将值从一个操作传递到另一个操作。是否有其他方法可以做到这一点?

您应该尝试使用已经支持此功能的现有网格,例如签出:

它是一个基于JQuery的网格,为您处理分页、过滤、排序等。
如果您有大量数据,它甚至允许您在服务器端检索数据。请记住:“不要重新发明轮子”

是的,您需要在页面操作中传递当前搜索参数。请记住,在ASP.NET MVC中,您需要将信息重新发布到服务器。。。因为它不保存状态

如果您使用的是页面列表软件包,则需要执行以下操作:

@Html.PagedListPager(Model.YourList, page => Url.Action("PostAction", new { page, Model.SearchString,Model.OtherFilter, sortOrder = ViewBag.CurrentSort}))
如果您不是,请查看以下内容:

在这里您可以看到一些代码示例。。。但该组件可以通过安装


在Stackoverflow中,您可以看到许多关于PagedList的问题/答案

您是否考虑使用PagedList库进行分页?您所要做的就是在ASP.NET MVC应用程序中引用页面列表库

using PagedList;
and the Index method of your controller will be something like

public ActionResult Index(int? page)
{
            var questions = new[] {
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 1" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 2" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 3" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 4" }
            };

            int pageSize = 3;
            int pageNumber = (page ?? 1);
            return View(questions.ToPagedList(pageNumber, pageSize));
}
要安装PagedList.Mvc,请在PackageManager控制台中运行以下命令。您也可以使用NuGet获取此包

PM> Install-Package PagedList.Mvc
您的viewmodel

public class QuestionViewModel
{
        public int QuestionId { get; set; }
        public string QuestionName { get; set; }
}
在控制器中,参考页面列表

using PagedList;
and the Index method of your controller will be something like

public ActionResult Index(int? page)
{
            var questions = new[] {
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 1" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 2" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 3" },
                new QuestionViewModel { QuestionId = 1, QuestionName = "Question 4" }
            };

            int pageSize = 3;
            int pageNumber = (page ?? 1);
            return View(questions.ToPagedList(pageNumber, pageSize));
}
以及您的索引视图

@model PagedList.IPagedList<ViewModel.QuestionViewModel>
@using PagedList.Mvc; 
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />


<table>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.QuestionId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.QuestionName)
        </td>
    </tr>
}

</table>

<br />

Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager( Model, page => Url.Action("Index", new { page }) )
@model PagedList.IPagedList
@使用PagedList.Mvc;
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.QuestionId)
@DisplayFor(modelItem=>item.QuestionName)
}

@Model.PageCount的@页(Model.PageCountUrl.Action(“Index”,new{page}))
生成的屏幕看起来像


你能发布你的代码吗?我还没有完成编码。我正在寻找样本。我不允许使用数据表。我们可以只用MVC吗?当我得到一个结果时,我会得到一百万条记录。在您的示例中,
var-question=
我无法将一百万条记录绑定到此变量。当我按下第二页时,我必须再打一次电话给数据库,获取第二组记录。存储过程将负责返回第二组记录。但当我按下第二页按钮时,我已经传递了相同的搜索输入值。然后你必须编写自己的自定义代码来实现这一点,这应该没有那么困难。如果单击
下一页按钮时搜索输入值丢失
,那么我猜您在某些地方重置了视图模型值。如果您使用的是具有强类型视图的视图模型,则除非您重新初始化vm类,否则它应该保留输入值。@SaravananGengan。。。如果不执行“.ToList()”,则不会在数据库中执行查询。所以它只在你提问时执行。ToPagedList(1,20)。因此,该列表将只有20条记录。试试这个。。。并检查是否需要其他解决方案。