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、准备一个模拟类和类的集合

模拟类

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

 

webconfig配置

 

二、简单应用

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

View

View

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

 三、分页显示

1、简单分页:

View:

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中也很好的支持了自定义分页

自定义分页代码

3、分页中有用的属性

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

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

将分页输出改为: 

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

会得到如下结果:

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

四、颜色分隔

View:

行颜色分隔代码

要注意的是这里要引入<%@ 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   ,如需转载请自行联系原作者
相关文章
|
12天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
5月前
|
人工智能 开发框架 .NET
如何掌握.NET技术,引领开发前沿:.NET技术的核心能力、在现代开发中的应用实践、以及如何通过.NET技术实现持续创新。
.NET技术已成为软件开发不可或缺的部分,本文分三部分探讨:核心能力如多语言支持、统一运行时环境、丰富的类库及跨平台能力;现代开发实践包括企业级应用、Web与移动开发、云服务及游戏开发;并通过性能优化、容器化、AI集成等方面实现持续创新,使开发者站在技术前沿。
76 3
|
1月前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
85 2
|
3月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
3月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
53 7
|
5月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
56 8
|
5月前
|
Kubernetes 监控 Devops
【独家揭秘】.NET项目中的DevOps实践:从代码提交到生产部署,你不知道的那些事!
【8月更文挑战第28天】.NET 项目中的 DevOps 实践贯穿代码提交到生产部署全流程,涵盖健壮的源代码管理、GitFlow 工作流、持续集成与部署、容器化及监控日志记录。通过 Git、CI/CD 工具、Kubernetes 及日志框架的最佳实践应用,显著提升软件开发效率与质量。本文通过具体示例,助力开发者构建高效可靠的 DevOps 流程,确保项目成功交付。
106 0
|
5月前
|
人工智能 前端开发 开发工具
NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践
.NET技术自2000年推出以来,在软件开发领域扮演着关键角色。本文从核心优势出发,探讨其统一多语言平台、强大工具集、跨平台能力及丰富生态系统的价值;随后介绍.NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践;最后分析性能优化、容器化、AI集成等方面的挑战与机遇,展望.NET技术的未来发展与潜力。
87 2
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
91 0