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 = ;
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的分页控件的更多相关文章
- 自定义分页控件-基于Zhifeiya的分页控件改版
基于Zhifeiya的分页控件改版的分页. html显示代码: <div class="pagelist"> {{.pagerHtml}} </div> c ...
- MVC无刷新查询,PagedList分页控件使用,导出Excel
使用MVC开发也有一段时间了,总结下无刷新部分视图的使用.PagedList分页控件的使用. @using PagedList @model StaticPagedList<T> < ...
- ASP.NET MVC CheckBoxFor为什么会生成hidden input控件
自己开发的公众号,可以领取淘宝内部优惠券 @Html.CheckBoxFor(m => m.Bool) 使用CheckBoxFor方法得到的html代码会是下面这个样子 <input ch ...
- asp.net webform 自定义分页控件
做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 在ASP.NET MVC中实现基于URL的权限控制
本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...
- ASP.NET MVC 简单介绍①
ASP.NET MVC 简单介绍① 只做了重要描述,内容出自菜鸟教程网站内容. 目录 1布局 2HTML 帮助器 3.Razor 语法 4.添加样式 5.Layout 6. Controllers ...
- ASP.NET MVC 简单事务添加
ASP.NET MVC 简单事务 //实例化查询上下文 using ( BookStoreEntities db = new BookStoreEntities()) { //找到需要价格和名称的数据 ...
- ASP.NET MVC 简单分页代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
随机推荐
- 【web安全】-- springboot实现两次MD5加密
一.为什么要做两次MD5 客户端MD5:HTTP在网络上是使用明文传输,用户输入的明文密码直接在网络上传输太危险.所以,在客户端先进行一次MD5(明文+固定盐). 服务端:服务端接受到后,也不是直接写 ...
- 十分钟了解HTTPS
一.为什么要用HTTPS——HTTP协议的缺陷 通信使用明文(不加密),内容可能会被窃听 不能验证通信方的身份,所以请求和响应都有可能是攻击者发送的 数据包在由A到B的过程中,可能经历很多次路由转发, ...
- AT与ATX电源 - 1 系统状态
ATX与AT电源比较 ATX电源普遍应用在PC中,它有两套电源,一个是正常操作使用:12V,5V,3.3V和-12V,还有一个独立的5V待机电源,所谓的待机电源就是其ON的充要条件是AC输入存在,而正 ...
- 在Linux上搭建测试环境常用命令(转自-测试小柚子)
一.搭建测试环境: 二.查看应用日志: (1)vivi/vim 原本是指修改文件,同时可以使用vi 日志文件名,打开日志文件(2)lessless命令是查看日志最常用的命令.用法:less 日志文件名 ...
- maven 禁止连接外网仓库
有些内网机器不能连外网的情况下,因为依赖的项目pom配置问题,mvn package时仍会尝试请求外网的repo(比如默认中央repo或oss). 此时配置 settings.xml 为自己内网rep ...
- Java语法细节 - synchronized和volatile
目录 synchronized关键字 关键字volatile synchronized关键字 synchronized关键字锁住方法和this的不同之处: public synchronized vo ...
- MapReduce的工作原理
MapReduce简介 MapReduce是一种并行可扩展计算模型,并且有较好的容错性,主要解决海量离线数据的批处理.实现下面目标 ★ 易于编程 ★ 良好的扩展性 ★ 高容错性 MapReduce ...
- python基础之函数式编程
一.定义: 函数作为参数作用:将核心逻辑传入方法体,使该方法的适用性更广,体现了面向对象的开闭原则: 函数作为返回值作用:逻辑连续,当内部函数被调用时,不脱离当前的逻辑. 二.高阶函数: 1.定义:将 ...
- getMemory的经典例子
//NO.1:程序首先申请一个char类型的指针str,并把str指向NULL(即str里存的是NULL的地址,*str为NULL中的值为0),调用函数的过程中做了如下动作:1申请一个char类型的指 ...
- easyui自定义皮肤及缺陷修改
引言: 一个商业项目的需要,又因为时间紧迫的关系,准备购买一套简洁,易用,可定制化强的UI,经过对国内外多家UI产品进行了对比, 包括:FineUI, EasyUI, EXT.NET, EXTJS, ...