声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版。
通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解。
WebForms 中表格的数据库分页
WebForms中的代码会比较直观,我们从具体是示例入手:
http://fineui.com/demo/#/demo/grid/grid_paging_database.aspx
首先看下前台 View 的定义:
和 WebForms 中的类似,我们同样需要设置一些属性来启用数据库分页:
1. AllowPaging(true):启用分页
2. IsDatabasePaging(true):启用数据库分页
3. PageSize(5):每页记录数
4. OnPageIndexChanged(Url.Action(“Grid1_PageIndexChanged”), “Grid1”):分页切换事件,需要回发到后台重新绑定表格数据
注意 OnPageIndexChanged 事件处理函数的定义,它比 WebForms 中多了个参数 Grid1,在前面文章中我们知道这个参数会把表格的相关分页排序等信息一起回发到后台。
为什么WebForms不需要这些信息呢/p>
因为 WebForms 通过 ViewState 等内部机制来维持 HTTP 请求之间控件的状态,从而可以方便的在后台使用 Grid1.PageIndex 等属性。
除了上面的四个属性,你可能还注意到如下两个设置:
5. RecordCount(ViewBag.Grid1RecordCount)
6. DataSource(ViewBag.Grid1DataSource)
这两个是通过 ViewBag 从控制器传入的参数,分别对应于表格总记录数和当前分页数据源。对比下 WebForms 中实现,我们可以清楚的意识到:
1. WebForms中页面初始化时,后台代码能够直接访问到页面(.aspx)上定义的控件,所以可以直接在后台代码中对控件赋值。
2. MVC中页面初始化时,后台代码不能访问到视图(.cshtml)上定义的控件,所以必须在控制器方法中准备好数据,然后传入视图中。
看下页面初始化时,MVC如何准备表格分页数据,并存储到 ViewBag 中:
正因为如此,在MVC中,页面初始化和之后的事件处理函数(回发)不能共用 BindGrid 类似的函数。
因此,在分页切换事件处理函数中(换成MVC的术语:客户端的分页事件对应的后台控制器方法),我们需要通过 UIHelper 帮助来更新表格数据:
注意,控制器方法的两个参数名称是约定好的,如果前台通过控件ID的方式来传入自定义回发参数时:
后台接受请求的参数名约定为:
1. 表格控件ID_pageIndex:表格当前分页序
2. 表格控件ID_fields:表格用到了哪些表格字段(如果不是表格,是IEnumrable
为什么需要 Grid1_fields 参数/strong>
很多 友会有这个疑问,其实理解起来也很简单。因为表格可能存在很多字段,假设有 100 个,可能只有其中的 10 个字段表格用到了。那么数据绑定时只返回这 10 个字段的数据。
假设数据绑定时没有传入这个参数,也是可以运行的,只不过会返回很多冗余数据,也可能会造成关键数据泄密(比如密码等)。
最后,我们看下 MVC 中,分页回发的请求正文:

响应正文:
小结
学习 FineUIMvc 中表格的数据库分页代码,关键是要理解 WebForms 和 MVC 的不同工作方式。
WebForms中页面初始化时,后台代码可以直接访问页面控件,所以能直接在后台代码中对控件进行数据绑定。MVC中页面初始化时,控制器方法中不能访问视图中定义的控件,需要准备数据通过ViewBag或者模型对象传入到视图中。
WebForms中页面回发时,后台代码可以知道控件的所有属性。MVC中页面回发时,后台代码需要的任何参数都要由前台通过JavaScript代码显式的传入(FineUIMvc提供了控件ID作为参数的简单传值方法)。
《FineUIMvc随笔》目录:http://www.cnblogs.com/sanshi/p/6473592.html
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树查询进阶 分页查询31293 人正在系统学习中 相关资源:wax_tasks:使用蜡Wa处理收集数据的实用程序任务-其它代码类资源…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!