Fork me on GitHub

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

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

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

吴起婚嫁习俗

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

谢客

缤摆或认大小结束时管事人要向客人们说一些客套话,一方面对来客的祝贺帮忙表示谢意,另一方面对主家没有招待好表示歉意。其中最为有趣的是向外家人、媒人、厨师、吹鼓手说的谢词。向外家人说的是:“今是古,古是今,盘古开天到如今。天上有个蟠桃会,地下有个儿女亲。蟠桃会会的是各路神仙,儿女亲会的是老小外家。给老小外家看杯,新人有礼。”向媒人说的是:“天上无云不下雨,地上无媒不成亲,青山跑成白路,鞋底子磨透,两家的闲话受够,如今大事成就。酒一瓶,肉一方,白面馍馍尽你装,看盅,新人有礼!”对厨师说的是:“某某师傅手手巧,各样调料放得好,生的做熟,硬的煮烂,得到各位客人的称赞,来时穿的青衣蓝衫,现在滚的油渍果眼,有心给你换上两件,主家还有些不便,酒一瓶,肉一方,白面馍馍尽你装,看盅,新人有礼了!”对吹鼓手说的是:“鼓乐师傅辛苦了,走时吹的将军出阵,回来吹的得胜回营,给我们迎来了满门人,两家合成一家人。一杯水酒相谢,新人有礼。”对送人的大客说的是:“你们住的高楼大厦,我们住的茅庵草舍,你们吃的山珍海味,我们吃的粗茶淡饭,你们是八仙桌子太师椅,我们是榆木桌子烂板凳,吃苦受累说不成,给我们送来了满门人,一杯水酒相谢,新人有礼。”最后还要对所有帮忙代劳的都说一番感谢的话:“剥葱的,捣蒜的,担水的,扫院的,圪里圪瘩乱串的,总而言之,一杯水酒相谢,新人有礼。”这些说词没有一定格式,可多可少,可文雅,可诙谐,都是由管事人现场编撰说出,主要是为了给喜事增添喜庆气氛,惹逗客人们一笑。像对吹鼓手能开玩笑的就有另一种说法:“铜头子,木杆子,八个指头按眼子,眼睛瞪得像兔卵子,喇叭头、妥子淌的水点子,辛苦了,一杯水酒相谢!”

正席

即正日摆的酒席。吴起的正席讲究很多,首先是饭、菜、酒的讲究,酒宴一般为“十全”(十碗菜)、“十三花”(十三碗菜),喝酒菜有干果、鲜果、鸡、鱼、猪肉、羊肉等荤素搭配,吃饭的菜都是蒸碗子、有荤有素。所饮酒是家造酒、白酒、甜酒、啤酒多管齐下。酒过数巡,主家要分别为宾客斟酒敬烟;然后由新郎新娘为席间所有宾客敬酒敬烟。敬酒一般用两种酒,即白酒、葡萄酒,男的敬白酒,女的敬葡萄酒。敬酒一般都必须喝,确实不喝酒的可以请同桌人代喝。酒宴期间划拳、摇宝、打通关占用时间较长,一般待一轮客得3个小时左右,坐席的人互相要猜拳行令,主家还要选出一些酒量大、拳划得好的人与送人的进行挑战。在撤酒席时,还要留一桌供爱耍的人继续划拳比试。一次酒席都要有几个喝醉酒的人,这才叫喝好了,事过好了二酒喝好后,桌上的菜肴要全部撤掉,再重新上一茬吃饭的菜,菜的摆放也有讲究,不能随便乱放。宴席上的主食为白面蒸馍。宾客的坐位也有讲究,分首席(男女外家人坐),偏席(按辈分由近及远分别坐),普通席(其他宾客随便坐)。正席结束即为婚庆结束。

首席

在正日所有的席桌中,其中有一桌为首席,首席的上座为男女外家。正高工菜、敬酒等各种礼仪都首先从首席开始,当地流传一句俗语就是“吃酒望上席(首席)”,可见首席在酒宴中的位置之重要。

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