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