html表格中的MVC分页

Sar*_*gan 3 asp.net-mvc

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

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

当我按下搜索按钮(第一篇http帖子)时,视图模型具有用户输入的所有值,但是当我按下下一页按钮(第二篇帖子)时,视图模型不会保留用户在搜索中输入的值输入字段。

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

Den*_*s R 5

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

要安装 PagedList.Mvc,请在包管理器控制台中运行以下命令。您也可以使用 NuGet 来获取此包。

PM> Install-Package PagedList.Mvc
Run Code Online (Sandbox Code Playgroud)

你的视图模型

public class QuestionViewModel
{
        public int QuestionId { get; set; }
        public string QuestionName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,引用 PagedList

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));
}
Run Code Online (Sandbox Code Playgroud)

和你的索引视图

@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 }) )
Run Code Online (Sandbox Code Playgroud)

结果屏幕看起来像

在此输入图像描述