Fork me on GitHub

MvcPager 分页示例 — 搜索结果分页

该示例演示使用GET方法提交查询表单,将搜索条件附加到url中,因此实现分页过程中的搜索功能。

注意:为了使每次点击搜索按钮时都跳回第一页,BeginForm扩展方法中第三个参数用new RouteValueDictionary{{"id",""}}将页索引路由值指定为空值,否则若当前为第五页,则点击搜索按钮重新搜索后当前页仍然为第五页。

搜索关键字:
序号 文章标题 作者 文章来源
16 延安市吴起县境内古城投资三亿欲变陕北名镇 杨涛 吴起政府网
17 延安市居住证首发仪式在吴起举行 Webdiyer 吴起热线
18 黄土高原上的绿色丰碑——吴起县生态环境建设巡礼 杨涛 吴起热线
19 吴起的追梦之旅——吴起县争创“全国百强县”纪实 杨涛 吴起热线
20 延安铁边城入选第七批全国重点文保单位 杨涛 吴起热线
首页 上页 1 2 3 4 5 6 7 8 9 10 ... 下页 尾页 

View:

@model PagedList<article>
@using (Html.BeginForm("Search", ViewContext.RouteData.GetRequiredString("Controller"), new RouteValueDictionary { { "id", "" } }, FormMethod.Get))
{
        <div class="well well-sm">
        <span>搜索关键字:</span><input type="text" name="kword" value="@Request.QueryString["kword"]" style="width:120px" /><input type="submit" value="搜索(S)" accesskey="S" />
        <span>(请输入“吴起”或“吴起县”进行测试)</span>
    </div>
}
    @Html.Partial("_ArticleTable", Model)
    @Html.Pager(Model).Options(o => o.SetPageIndexParameterName("id").SetPagerItemTemplate("{0}&nbsp;"))

_ArticleTable.cshtml:

@model PagedList<Article>
<table class="table table-bordered table-striped">
    <tr>
        <th class="nowrap">序号</th>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.PubDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Author)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Source)
        </th>
    </tr>
    @{ int i = 0;}
    @foreach (var item in Model)
    {
        <tr>
            <td>@(Model.StartItemIndex + i++)</td>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PubDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Author)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Source)
            </td>
        </tr>
    }
</table>

Model:

    public class Article
    {
        [Display(Name="文章编号")]
        public int ID { get; set; }
        [Display(Name="文章标题")]
        [MaxLength(200)]
        public string Title { get; set; }
        [Display(Name = "文章内容")]
        public string Content { get; set; }
        [Display(Name = "发布日期")]
        public DateTime PubDate { get; set; }
        [Display(Name = "作者")]
        [MaxLength(20)]
        public string Author { get; set; }
        [Display(Name = "文章来源")]
        [MaxLength(20)]
        public string Source { get; set; }
    }

Controller:

             
        public ActionResult Search(int id = 1, string kword = null)
        {
            using (var db = new DataContext())
            {
                var query = db.Articles.AsQueryable();
                if (!string.IsNullOrWhiteSpace(kword))
                    query = query.Where(a => a.Title.Contains(kword));
                var model = query.OrderByDescending(a => a.PubDate).ToPagedList(id, 5);
                return View(model);
            }
        }