Fork me on GitHub

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

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

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

吴起婚嫁习俗

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

嫁妆

女方为新娘陪送的服装等物,一般有衣服、鞋、鞋垫、被褥、毛毯等,也有陪送家什电器的。出嫁女儿的陪嫁物品,要有两张红纸写的贺礼单:一张叫陪方单,一张叫添箱单。陪方单上首先写东主(即新郎家)送来的东西,接着写外家行的礼,娘家陪嫁的东西。添箱单上写的是哥嫂、姐妹、姑姨、叔婶们送给新娘的东西,大多是鞋袜手帕之类的小物件。小物件的叫法、用语也有讲究。比如男鞋要叫“乾履成双”,女鞋要叫“坤履成对”,小针线活叫“耍花一串”等,最后要写上“鸳鸯(枕头)一对,锁钥俱全”。

撒箱

女方陪嫁物和亲友的贺礼收起后,双方的主事人要清点交接,人箱上锁,以备运往婆家。锁箱前男女双方父母(或其他长辈)要往箱内放“撒箱钱”,女方先放,男方后放,男方放的钱数必须是女方的2倍,钱数由双方事先商定,数量不等。原则是:既显富贵、大方,又不难为亲戚、伤了和气。

上马

新娘上马是出嫁女子最隆重的仪式。鼓乐鞭炮齐鸣,搂马人面南而立。新娘在厨房由娶送人婆姨为其穿“媵衣”,搭蒙头。当一切就绪,女方管事人高声宣布新人上马后,搂马人将新娘从炕上抱起,一直要抱到马背上(新娘从上马到男方铺床前这段时间脚不能沾地)。新人一上马,迎送亲的队伍就浩荡起程。

接路

也叫挡路。迎亲队伍返回路上,凡经过大小庄头村镇,娶人队伍中的乐班都要鼓乐齐鸣,所经过的庄里人要在路边上支起桌子,摆上酒、水款待,称“接路”或“挡路”。由娶人的代事人和挡路的代表互相揖让,招呼队伍小憩。娶送人的也有人喝点水,以解路途劳渴,然后起身上路。娶人的要给挡路的送两盒烟,以示谢意。其实挡路人都是新郎家事先安排好的,以便在新亲戚面前显示人缘宽广。

讨花红

估计迎亲人马快回来时,新郎要给自己的外家人摆桌子上酒菜“讨花红”(即贺礼,男方外家给外甥的被面),将讨来的“花红”斜搭在左肩右腋下,称“挂花红”。若花红被面是两匹以上者可交叉披挂在双肩上。

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