Fork me on GitHub

MvcPager 分页示例 — 文章内容分页

该示例演示如何用MvcPager实现长文章内容分页。

文章内容分页的实现原理是:在文章录入或编辑时在需要分页的地方插入分页符(一般富文本编辑器都有此功能),获取文章内容后通过正则表达式获取文章中所有分页符,每个分页符之间的内容即为一页,所有分页符总数即为总页数。

吴起婚嫁习俗

来源:吴起热线   作者:Webdiyer    发布日期:2011/3/5 0:00:00

送人的

即陪送新娘的人。两位送人婆姨(一般为新娘的姑姑、姐姐或嫂子)和女方外家、姨家、姑家亲戚及本家爷爷、兄弟和族中各辈人组成。送人的人数一般是娶亲人数的两倍左右。

拉马娃娃

为新娘牵马的人。选择新郎的弟弟或侄儿一人,年龄在十五六岁,为新娘牵马,叫拉马娃娃。现在虽用车娶,仍要指定一人为拉马娃娃。

过夜、打当儿

这是根据嫁娶双方路途远近而定,路途远的,娶人的要在女家住一夜,叫“过夜”,路途近的、当日可娶回的叫“打当儿”。

女方待客

贺喜日,女方在新娘嫁走前也要待客,女方待客也要吃三顿饭,顺序同男方,待客所用烟、酒、茶饭一般都是在议话时商量好的,基本与男方相同,也有档次略低一点的。

搂马人

即嫁娶时一路保护新娘的人。一般由新娘的兄、弟、父辈中强壮男子充当,至少两人。在新娘上马前要由娶方的代事人给搂马人敬一杯酒,行话叫“看盅”,表示请到。

押箱人

押运女方陪嫁物的人。一般由新郎姐夫和女外家各一人承担。娶人之日,女方酬客结束后,押箱人要将女方陪嫁物装箱由牲畜驮运(较娶送人的提前出发)回到男方。现在都是装车同时出发。

View:

@model PagedArticle
<h2 class="center">@Model.Title</h2>
<div class="center">来源:@Model.Source   作者:@Model.Author    发布日期:@Model.PubDate</div>
<div class="content">@Html.Raw(Model.Content)</div>
<div class="text-center">
    @Html.Pager(Model).Options(o => o.SetContainerTagName("ul").SetCssClass("pagination").SetCurrentPagerItemTemplate("<li class=\"active\"><a href=\"#\">{0}</a></li>").SetDisabledPagerItemTemplate("<li class=\"disabled\"><a>{0}</a></li>").SetPagerItemTemplate("<li>{0}</li>").SetPageIndexParameterName("id").SetRouteName("MvcPager_Default"))
</div>
    

Model:

    [NotMapped]
    public class PagedArticle:Article,IPagedList<string>
    {
        private readonly IEnumerable<string> _pagedContent;
        private PagedArticle(){}
        public PagedArticle(Article art, int pageIndex)
        {
            //获取文章内容中的分页符的正则表达式,分页符通过ckeditor等富文本编辑器的“插入分页符”功能插入到文章中,html代码为“<div style="page-break-after: always"> <span style="display: none;">&nbsp;</span></div>”
            var re = new Regex("<div\\s+style =\"page-break-after:\\s*always;?\">[\\r\\n]*.*?</div>",
                               RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled |
                               RegexOptions.IgnorePatternWhitespace);
            _pagedContent = re.Split(art.Content);
            if(pageIndex>_pagedContent.Count()||pageIndex<1) throw new invalidoperationexception("页索引超出界限");
                                                             id=art.ID;
                                                             title=art.Title;
                                                             author=art.Author;
                                                             content=_pagedContent.ToArray()[pageIndex - 1];
                                                             pubdate=art.PubDate;
                                                             source=art.Source;
                                                             currentpageindex=pageIndex;
                                                             pagesize=1;
                                                             totalitemcount=_pagedContent.Count();
                                                             }
                                                             public ienumerator<string> GetEnumerator()
        {
            return _pagedContent.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public int CurrentPageIndex { get; set; }
        public int PageSize { get { return 1; } set{} }
        public int TotalItemCount { get; set; }
    }

Controller:

        
        public ActionResult ContentPaging(int id=1)
        {
            using (var db = new DataContext())
            {
                var art = db.Articles.SingleOrDefault(a => a.ID == 25); //获取演示用的长文章
                if (art != null)
                {
                    return View(new PagedArticle(art, id));
                }
                return new HttpNotFoundResult("找不到指定的文章");
            }
        }