ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

简介:

我的ASP.NET MVC实践系列

ASP.NET MVC实践系列1-UrlRouting

ASP.NET MVC实践系列2-简单应用

ASP.NET MVC实践系列3-服务器端数据验证

ASP.NET MVC实践系列4-Ajax应用

ASP.NET MVC实践系列5-结合jQuery

ASP.NET MVC实践系列6-Grid实现(上)

 

其他:

在ASP.NET MVC中对表进行通用的增删改

很多情况下我们展示数据都是通过网格来做的,在webform中我们常使用GridView或ListView,实际上简单实现这些网格也并不困难,上节讲了在mvc中Grid的简单实现,但是如果很多页面都要使用网格来显示,每次都要写循环的td,tr就有点麻烦了,当然在mvc中我们可以继续使用GridView或ListView,但是使用的时候很多地方很蹩脚,这里我们可以利用Helper的方式来封装这个过程。Mvc Contrib中帮我们实现好了一套Grid,所以这里我不重新搞个新的了,Contrib的源码可以到http://www.codeplex.com/MVCContrib 中下载

一、准备工作

1、准备一个模拟类和类的集合

ContractedBlock.gif 模拟类

2、为了在View中输入时不用每页使用<%@ Import Namespace="MvcContrib.UI.Grid" %>导入命名空间,我们需要在webconfi的<pages>中输入如下:

 

ContractedBlock.gif webconfig配置

 

二、简单应用

在View中输入 <%=Html.Grid(Model).AutoGenerateColumns() %>,Grid根据Model中的内容反射得到相应的列和行,非常简单,但并不实用。一般我们需要定义需要显示的列:

View

ContractedBlock.gif View

Columns的参数是一个Action<ColumnBuilder<T>的委托,Grid方法会利用你传入的这个委托来帮你处理表格显示。column.For是用来处理每个列的,Named用来重新标示列名,如果不使用Named,列名直接为For参数的ToString()内容。默认情况下列中显示的内容都会被编码,所以如果不需要编码则需要使用DoNotEncode()方法。

 三、分页显示

1、简单分页:

View:

ContractedBlock.gif View

这里需要注意Inherits="System.Web.Mvc.ViewPage<IPagination<News>>" ,这个强类型是用于分页的

Controller:

         public  ActionResult ListPager( int ?  page)
        {
            var pagedNews 
=  ListNews.GetList().AsPagination(page.GetValueOrDefault( 1 ),  5 );
            
return  View(pagedNews);
        }

这里不要忘了要引入命名空间MvcContrib.Pagination;

这个AsPagination是IEnumerable<T>的扩展方法,是将实现了IEnumerable的集合类转换成IPagination<T>

2、自定义分页

上面的那个简单分页实现起来很容易,但对于大数据量的情况往往性能不佳,所以我们常常要自定义分页,contrib中也很好的支持了自定义分页

ContractedBlock.gif 自定义分页代码

3、分页中有用的属性

默认分页的页面展示如下:

估计这不会是你想要的分页格式,下面我们自定义一下这个分页 

将分页输出改为: 

<%= Html.Pager(Model).First("第一页").
    Last("最后一页").Previous("上一页").Next("下一页").Format("当前为从{0}行到{1}行,总{2}行,") %>

会得到如下结果:

默认情况下有两个class可控制。

四、颜色分隔

View:

ContractedBlock.gif 行颜色分隔代码

要注意的是这里要引入<%@ Import Namespace="MvcContrib.UI.Grid.ActionSyntax" %>命名空间

五、排序

1、默认排序

contrib的grid中默认排序很简单

你希望按哪列排序就改写那列

column.For(x => x.Author).Sortable(true);

但这种排序可能不符合你的要求,因为它只会将本Model的数据进行排序,当自定义分页的时候得到的往往不是你想要的结果。

2、自定义排序

可以改写需要排序的列:

    column.For(x => x.Author).Header("<th>"+Html.ActionLink("作者","CustomPager",new{desc = Convert.ToBoolean(ViewData["desc"]),sortName="Author"})+"</th>");

Controller中的做法可以参考ASP.NET MVC实践系列6-Grid实现(上)

六、其他

参见MvcContrib.Samples.UI,可以在http://www.codeplex.com/MVCContrib 中下载

七、源码下载


本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2009/11/12/1601959.html   ,如需转载请自行联系原作者
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
29天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
29天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
4月前
net实践记录
net实践记录
17 0
|
4月前
|
开发框架 .NET
Asp.Net就业课之案例实践第二次课
Asp.Net就业课之案例实践第二次课
23 0
Asp.Net就业课之案例实践第二次课
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
51 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1653 0