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