html表中的MVC分页

时间:2014-10-01 20:24:08

标签: asp.net-mvc

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

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

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

我被建议不要使用临时数据将值从一个动作传递到另一个动作。还有其他办法吗?

3 个答案:

答案 0 :(得分:3)

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

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

PM> Install-Package PagedList.Mvc

您的viewmodel

public class QuestionViewModel
{
        public int QuestionId { get; set; }
        public string QuestionName { get; set; }
}

在您的控制器中,引用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));
}

您的索引视图

@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 }) )

结果屏幕看起来像

enter image description here

答案 1 :(得分:0)

您应该尝试使用已支持此功能的现有网格,例如,请查看:Datatables

它是一个基于JQuery的网格,可以为您处理分页,过滤,排序等。 如果你有很多数据,它甚至允许你在服务器端检索它。请记住: &#34;不要重新发明轮子&#34;

答案 2 :(得分:0)

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

如果您使用的是 PagedList 包,请执行以下操作:

@Html.PagedListPager(Model.YourList, page => Url.Action("PostAction", new { page, Model.SearchString,Model.OtherFilter, sortOrder = ViewBag.CurrentSort}))

如果不是,请查看:https://github.com/troygoode/PagedList

在那里你可以看到一些代码示例......但是组件可以通过Nuget安装。

在Stackoverflow中,您可以看到很多关于PagedList

的问题/答案