最近在写一些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 = ;
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 <)
{
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 })

控件效果

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

  1. 自定义分页控件-基于Zhifeiya的分页控件改版

    基于Zhifeiya的分页控件改版的分页. html显示代码: <div class="pagelist"> {{.pagerHtml}} </div> c ...

  2. MVC无刷新查询,PagedList分页控件使用,导出Excel

    使用MVC开发也有一段时间了,总结下无刷新部分视图的使用.PagedList分页控件的使用. @using PagedList @model StaticPagedList<T> < ...

  3. ASP.NET MVC CheckBoxFor为什么会生成hidden input控件

    自己开发的公众号,可以领取淘宝内部优惠券 @Html.CheckBoxFor(m => m.Bool) 使用CheckBoxFor方法得到的html代码会是下面这个样子 <input ch ...

  4. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  5. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  6. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  7. ASP.NET MVC 简单介绍①

    ASP.NET  MVC 简单介绍① 只做了重要描述,内容出自菜鸟教程网站内容. 目录 1布局 2HTML 帮助器 3.Razor 语法 4.添加样式 5.Layout 6. Controllers ...

  8. ASP.NET MVC 简单事务添加

    ASP.NET MVC 简单事务 //实例化查询上下文 using ( BookStoreEntities db = new BookStoreEntities()) { //找到需要价格和名称的数据 ...

  9. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

随机推荐

  1. eclipse快速配置spring相关xml文件头信息

    通过spring tools 插件工具来快速配置xml头信息 ctrl +n 创建-----------> 输入spring 选中spring Beann Configuration File ...

  2. 【ORM框架】Spring Data JPA(一)-- 入门

    本文参考:spring Data JPA入门   [原创]纯干货,Spring-data-jpa详解,全方位介绍  Spring Data JPA系列教程--入门 一.Spring Data JPA介 ...

  3. 如何修改SnipeIT的部分设置

    作为一款开源的资产管理系统,Snipe-IT非常的好用又结实,但是原始设置对中国用户有些不方便,部分汉化没有完成,需要直接修改代码,下面把常用的修改记录如下: 1.修改资产打印标签中的文本名称 找到  ...

  4. LPC 语言基础

    LPC是一种基于C语言开发的编程语言 主要用于写MUD(多使用着迷宫)游戏 LPC是一种面向对象的语言,它有object的概念,但是没有class LPC有四中函数类型1> apply 只能被游 ...

  5. [POJ2259]Team Queue (队列,模拟)

    2559是栈,2259是队列,真的是巧啊 题意 模拟队列 思路 水题 代码 因为太水,不想打,发博客只是为了与2559照应,于是附上lyd的std #include <queue> #in ...

  6. typeof获取变量的数据类型 javascript

    获取变量的数据类型:typeof <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  7. Microsoft Graph: Developer Blog

    https://developer.microsoft.com/en-us/graph/blogs/announcing-30-days-of-microsoft-graph-blog-series/ ...

  8. java拦截处理System.exit(0)

    在使用TestNG做单元测试时,需要测试的代码中出现System.exit(0),导致单元测试还未结束程序就停止了.解决方法如下: public class TestMain { public sta ...

  9. 自然语言处理(四)统计机器翻译SMT

    1.统计机器翻译三要素 1.翻译模型 2.语言模型 3.排序模型 2.翻译流程 1.双语数据预处理 2.词对齐 3.构造短语翻译表 4.对短语翻译表进行概率估计 5.解码,beam search 6. ...

  10. [LeetCode] Lemonade Change 买柠檬找零

    At a lemonade stand, each lemonade costs $5.  Customers are standing in a queue to buy from you, and ...