Asp.net mvc简单实现基于Razor的分页控件

最近在写一些web应用了解了一下asp.net mvc发现的确好用,所以直接就干上了。不过在使用asp.net mvc的Razor模板的情况并不向传统webform那样可以使用控件。但从Razor的功能上已经具备相关代替的功能,只是从Razor角度来说不是 我们平常说的控件而是子模板。由于Razor可以根据自己需求把功能拆分到子模板中,然后通过RenderPage方法输出。从设计的手段上来看完全可以 把分页控件封装成一个子的cshtml,在需要的时候引用上就是了。

作为一个控件的设计其最重要的环节是隔离和独立性,在这方面Razor也考虑得比较周到, 通过PageData可以简单地进行模板之间的数据偶合问题。下面通过Razor实现一个简单的分页控件,在实现过程只需要编写一个简单的cshtml的 模板即可。在使用上也并不需要引用什么代码或DLL,直接在需要的地方嵌入相关cshtml则可以分页控件的功能。

参数制定

一个控件要输出信息必须制定相关的数据规范,一个简单的分页控件其实只需要两个参数即可以,分别当前页索引和总页数。可以在Razor模板的顶部声音一下数据规范

 @{
    int pageindex = (int)PageData["pageindex"];
    int spitindex = 0;
    int pagecount = (int)PageData["pagecount"];
}

这两上参数就是告诉使用者在调用RenderPage输入的时候必须带上这两个参数值.

分页URL制定

在一些数据查询中往往在URL上会带上一些相关参数,所以在输入分页URL的时候需要简单地处理一下。

 @functions{
    public static string GetUrl(int index)
    {
        System.Collections.Specialized.NameValueCollection querystring = HttpContext.Current.Request.QueryString;
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("?").AppendFormat("pageindex=" + index);
        foreach(string key in querystring.Keys)
        {
            if (key != "pageindex")
                sb.AppendFormat("&{0}={1}", key, HttpContext.Current.Server.UrlEncode(querystring[key]));
        }
        return sb.ToString();
    }
}

简单地把pageindex附加到当前url querystring即可.
分页内容输出

有了以上信息那构建一个分页内容输出就是件简单的事情了。

<div class="pagebar">
    <ul>
   
    <li id="pageinfo"><a>@Html.Raw(pageindex + 1) / @pagecount</a></li>
        @if (pageindex > 0)
        {
            <li><a href="@GetUrl(pageindex-1)">Previous</a> </li>
        }
        @{ spitindex = pageindex - 2;}
        @if (spitindex > 4)
        {
           
            <li><a href="@GetUrl(0)">1</a> </li>
            <li><a href="@GetUrl(spitindex - 2)">...</a> </li>
        }
        else
        {
            for (int i = 0; i < spitindex; i++)
            {
           
            <li><a href="@GetUrl(i)">@Html.Raw(i + 1)</a> </li>

            }
        }
        @for (int i = pageindex - 2; i < pageindex; i++)
        {
            if (i >= pageindex  i < 0)
            {
                continue;
            }
           
            <li><a href="@GetUrl(i)">@Html.Raw(i+1)</a> </li>
           
        }
        <li><a id="selectpage"><b>@Html.Raw(pageindex+1)</b> </a></li>
        @for (int i = pageindex + 1; i < pagecount; i++)
        {
            if (i >= pageindex + 3)
            {
                break;
            }
                
            <li><a href="@GetUrl(i)">@Html.Raw(i+1)</a> </li>
           
        }
        @{ spitindex = pageindex + 3; }
        @if (pagecount - 4 > spitindex)
        {
            <li><a href="@GetUrl(spitindex + 2)">...</a> </li>
            <li><a href="@GetUrl(pagecount - 1)">@pagecount</a> </li>
        }
        else
        {
            for (int i = spitindex; i < pagecount; i++)
            {
                   
            <li><a href="@GetUrl(i)">@Html.Raw(i+1)</a> </li>
            }
        }
        @if (pageindex != pagecount - 1)
        {
                     
            <li><a href="@GetUrl(pageindex + 1)">Next</a> </li>
           
        }
    </ul>
</div>

使用控件

控件使用非常简单只需要在Razor通过RenderPage输出即可

@RenderPage("~/views/controls/pagebar.cshtml", new { pageindex = Model.PageIndex, pagecount = Model.PageCount })

控件效果

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, 控件
, 模板
, 简单
, razor
, razor应用程序平台
, #razor
, MVC分页
, Razor  
, 一个
, mvc页
, mvc实现分页
MVC分页控件
,以便于您获取更多的相关知识。

时间: 2024-08-22 14:48:01

Asp.net mvc简单实现基于Razor的分页控件的相关文章

[ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定

在众多表单元素中,有一类<select>元素用于绑定一组预定义列表.传统的ASP.NET Web Form中,它对应着一组重要的控件类型,即ListControl,我们经常用到DropDownList, ListBox.CheckBoxList和RadioButtonList都是其子类.ASP.NET MVC通过对HtmlHelper和HtmlHelper<TModel>的扩展实现了对不同类型的<select>元素的绑定,它们以扩展方法的形式定义在SelectExten

ASP.NET MVC如何显示WebForm网页或UserControl控件

学习与使用ASP.NET MVC这样久,还是对asp.net念念不忘.能否在asp.net mvc去显示aspx或是user control呢? 这个灵感(算不上灵感,只能算是想法)是来自前些天有写过一篇<多个视图结果显示于一个共用预览视图内>http://www.cnblogs.com/insus/p/3633298.html 其中有一个Render方法.以致想起以前开发asp.net时,也经常Render用户控件.即是说把网页经过Render之后,转换为是一串字符串. 那我们也一定可以把这

基于jquery的分页控件(C#)_jquery

JS代码: Code: 复制代码 代码如下: var _MaxPageSize = 0; var _PageSize = 5; var _IsUpDown = false; function InitPage(funName, currentPageSize, maxPageSize, pageSize, isUpDown) { _FunName = funName; _CurrentPageSize = currentPageSize; _MaxPageSize = maxPageSize;

【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页方式) webform  (b/s) 支持多种数据库,分页算法,提取数据的方式都可以替换.     分页,自从做b/s的项目起,就和分页打起了交到,一开始使用UserControl来做,很粗糙,也没有什么性能可言.但是分页又是不可避免的,一次提取全部的数据,咱用的资源太多,吃不消.于是乎就在不断的想

打造一个通用ASP.NET数据分页控件

asp.net|分页|控件|数据 对于几乎所有的数据表现Web应用来说,组织好数据的显示方式.避免给用户带来混乱的感觉就是最主要的目标之一.每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了.将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法. 一.慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似

打造通用ASP.NET数据分页控件

asp.net|分页|控件|数据 对于几乎所有的数据表现Web应用来说,组织好数据的显示方式.避免给用户带来混乱的感觉就是最主要的目标之一.每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了.将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法. 一.慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似

asp.net中支持表头全选操作Winform分页控件

Winform分页控件,在很多场合都需要用到,由于整合较多的功能操作,使用起来效果更好,界面统一性也比较一致.其中的勾选操作,在有些场合下,也是比较有用的,因此提供该功能的整合. 我们先来看看基于我的分页控件实现的表头全选功能,界面效果如何. 1)传统界面的效果   2)DotNetBar界面效果   3)DevExpress界面效果    以上就是.NET开发中非常广泛应用的三组界面效果,分页控件分别提供了3种控件实现,几乎所有的属性及操作方法均一致,本实例中实现表头操作也是完全一致的,我们以

为ASP.NET MVC 2.0添加Razor模板引擎 (on .NET4)

根据ScottGu的博客记述(http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx),在未来不久将会发布一个ASP.NET MVC 3.0的Preview版本,在这个版本中可以使用多个内置的模板引擎,以它发布出来的截图来看,其中包括NHaml,Spark以及微软刚刚发布的ASP.NET Web Pages(Razor). ASP.NET Web Pages包含在Web Matrix中,提供了一种新的模板模

一个简单的ASP.MVC分页控件

分页功能实现方面参考了网上的一些内容,加上自己的一些修改,使用方式如 下: (鉴于分页代码基本上和别人的没什么两样,所以这里就省略了.) 封装扩展方法 public static string Pager(this HtmlHelper html, IPageData model, bool alwaysShow,bool showNumber) { string text = "<!--没有任何数据,所以不显示分页控件-->"; bool show = model.Tot