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("找不到指定的文章");
            }
        }