[原创] mvc3 webgrid ajax查询条件绑定(search conditions binding)、自动编号(serial number)及分页(paging)的样式定义
your browser does not support iframes.
本文只代表作者在一定阶段的认识与理解。
一.写作前提
在mvc3 bate version的时候小试了一把webgrid ,并写了篇记录文章《[原创] mvc3 web.helpers – webgrid ajax 及查询绑定》,这篇文章在对webgrid一定阶段认识的条件下完成的,本文将就一些功能再加入说明,并把自动 编号及paging css的实现加以说明,同时也希望能给更多人带来方便。
二.本文内容
jquery ajax实现webgrid查询条件的绑定(search conditions binding),并将webgrid公用化
webgrid自动编号(serial number)的实现
webgrid paging style的定义
三.webgrid ajax查询条件绑定及webgrid公用化
注:需要加载jquery的script的文件,具体请参考《[原创] mvc3 web.helpers – webgrid ajax 及查询绑定》。
实现查询条件和webgrid绑定其实是通过把查询条件以routing 的形式来传递,使生成webgrid的sorting及paging的请求路径中同样包含首次生成webgrid时候的查询条件,从而使webgrid可以保持查询条件的前提下做paging和sorting的操作,请看现面的例子。
search page
1 @{
2view.title = "index";
3layout = "~/views/shared/_layout.cshtml";
4 }
5script>
6$(function () {
7$("#btnsearchstudent").click(function (e) {
8e.preventdefault();
9var url = "?studentname=" + $("#studentname").val() +
10"&studentchinesename=" + $("#studentchinesename").val();
11url = "@viewdata["apppath"]/home/searchstudent/" + url;
12$('#searchformdiv').load(url, function (html)
13{ $('#searchformdiv')[0].value = html; });
14});
15});
16script>
17 student name: @html.textbox("studentname")
18br />
19 student chinese name : @html.textbox("studentchinesename")
20br />
21input type="button" value="search" id="btnsearchstudent" />
22div id="searchformdiv">
23div>
在上面的razor代码中,有两个查询条件student name和 student chinese name,当我们点击search button的时,调用jquery的ajax request方法,并把结果返回到指定的div标签中。小提一下,本来也像很多一样疯狂的喜爱razor的coding方式,使得代码相当简单。下面是action的实现代码。
controller
1 namespace tom.custom.controllers
2 {
3[handleerrors]
4public class homecontroller : basecontroller
5{
6private istudent _s;
7
8public homecontroller()
9{
10this._s = policyfactory.create();
11}
12
13public actionresult index()
14{
15this.viewdata.model = this._s.searchstudent(string.empty, string.empty);
16return view("searchstudent");
17}
18
19public partialviewresult searchstudent(string studentname, string studentchinesename)
20{
21idictionary showcolumns = new dictionary();
22
23this.viewdata.model = this._s.searchstudent(studentname, studentchinesename);
24
25showcolumns.add("student id", "studentid");
26showcolumns.add("student name", "studentname");
27showcolumns.add("student code", "studentcode");
28showcolumns.add("sex", "sex");
29showcolumns.add("nric/passport no.", "nricpassport");
30
31this.viewmodel.showcolumns = showcolumns;
32return partialview("uc/webgridtemplate", this.viewdata.model);
33}
34}
35 }
action中,根据ui传递的参数进行查询,并返回一个partialviewresult,然后把这个partialview返回给 ui的div。在我的例子中这个partialview返回的就是一个经过定制化的webgrid, 在上面的action中,我们把查询结果以model的形式返回,并且用变量“showcolumns”列出了要显示的列名称及绑定的字段,所以我们的webgrid现在只要显示指定结果中的指定字段即可。换言之,如果其它action中也有一个查询结果,并指定绑定,那么他就可以使用这个webgrid的partialview。ok,我们来看看这个partialview如何实现webgrid的公用化。
partialview webgrid
1 @{
2var grid = new webgrid(source: model, canpage: true,
3cansort: true, ajaxupdatecontainerid: "divgridd", rowsperpage: 20);
4
5ilist webgridcolumns = new list();
6idictionary showcolumns = viewdata["showcolumns"] as idictionary;
7
8if (showcolumns.count > 0)
9{
10foreach (string col in showcolumns.keys)
11{
12webgridcolumns.add(grid.column(showcolumns[col], col));
13}
14}
15div id="divgridd">
16div class="content-box">@grid.gethtml(
17caption: "search result:",
18mode: webgridpagermodes.all,
19numericlinkscount: 10,
20fillemptyrows: true,
21emptyrowcellvalue: " ",
22columns: webgridcolumns
23)
24 div class="webgrid-totalrow">total result: @grid.totalrowcountdiv>
25 div>
26 div>
27 }
下面是webgrid生成的jquery ajax paging 代码,我们可以看到,它会把查询条件以routing的形式进行传递,从而保证可以在查询结果中进行paging.
四.webgrid自动编号
在传统的gridview中可以很方便的进行自动 编号,但是似乎webgrid并没有给我们直接实现这个功能,那我们只能通过变通的方法来实现了。在生成webgrid的column时,它提供了一个format的方法,允许我们定制、填充这个column,在本例中,就是通过page size乘page number作为编号的开始,每一行加1,这样我们就可以实现自动编号了,我们修改上面的partialview如下所示。
partialview webgrid
1@{
2var grid = new webgrid(source: model, canpage: true,
3cansort: true, ajaxupdatecontainerid: "divgridd", rowsperpage: 20);
4var i = grid.rowsperpage * grid.pageindex;
5
6ilist webgridcolumns = new list();
7idictionary showcolumns = viewdata["showcolumns"] as idictionary;
8
9webgridcolumns.add(grid.column(format: (item) => (++i).tostring(), header: "s/n"));
10
11if (showcolumns.count > 0)
12{
13foreach (string col in showcolumns.keys)
14{
15webgridcolumns.add(grid.column(showcolumns[col], col));
16}
17}
18
20div id="divgridd">
21div class="content-box">caption: "search result:",
22mode: webgridpagermodes.all,
23firsttext: "« first",
24previoustext: "« previous",
25nexttext: "next »",
26lasttext: "last »",
27numericlinkscount: 10,
28fillemptyrows: true,
29emptyrowcellvalue: " ",
30columns: webgridcolumns
31)
32div class="webgrid-totalrow">total result: @grid.totalrowcountdiv>
33div>
34div>
35}
在上面的代码中var i = grid.rowsperpage * grid.pageindex;每行显示行数乘页数=当前页行号开始
webgridcolumns.add(grid.column(format: (item) => (++i).tostring(), header: “s/n”));
在创建每一行的时候,webgrid会以++i的值作为s/n列显示的值
五.paging style的定义
上面的style相信大家看了都不太喜欢吧,好吧,那我们就来修改修改。我们在partralview的gethtml的方法中,加了下面三个属性:
tablestyle: “webgrid-table”,
headerstyle: “webgrid-header”,
footerstyle: “paging-number”,
实现如下效果:
css如下:
css
1.webgrid-table
2{
3width: 100%;
4height: 100%;
5padding: 5px 5px 5px 5px;
6}
7
8.webgrid-table caption
9{
10text-align: left;
11vertical-align: middle;
12padding: 0px 0px 0px 5px;
13font-size: medium;
14font-weight: bold;
15}
16
17.webgrid-header
18{
19text-align: left;
20vertical-align: middle;
21}
22
23.webgrid-totalrow
24{
25font-weight: bold;
26}
27
28.paging-number
29{
30text-align: left;
31padding: 20px 0 5px 0;
32font-family: verdana, arial, helvetica, sans-serif;
33font-size: 10px;
34border-width: 1px;
35}
36
37.paging-number a
38{
39margin: 0 5px 0 0;
40padding: 3px 6px;
41border: 1px solid #ddd;
42-moz-border-radius: 5px;
43-khtml-border-radius: 5px;
44-webkit-border-radius: 5px;
45border-radius: 5px;
46}
六.总结
通过本章的学习,可以了解如下内容:
1.mvc3 中webgrid ajax paging的操作
2.webgrid中属性的使用
3.webgrid中paging style的设置
标签: asp.net mvc webgrid, webgrid aaja, webgrid paging, webgrid sorting, webgrid search condition
绿色通道:好文要顶关注我收藏该文与我联系
posted @ 2010-12-23 19:24 我-大熊 阅读(2073) 评论(7)编辑 收藏
发表评论
2257147
回复 引用 查看
#1楼 2010-12-23 19:48 chenyulie
学习下!
回复 引用 查看
#2楼 2010-12-24 14:29 webaspx
嗯,功能是不错,不过分页的话数据是一次性拉出来的,数据量大的话性能不太好。
回复 引用 查看
#3楼[楼主] 2010-12-24 16:02 我-大熊
引用webaspx:嗯,功能是不错,不过分页的话数据是一次性拉出来的,数据量大的话性能不太好。
其实你可以通过传入的参数进行分页,然后返回
回复 引用 查看
#4楼 2011-02-21 19:42 lvquanming
@viewdata["apppath"],apppath是什么意思,没有看到它的定义啊
回复 引用 查看
#5楼 2011-07-17 18:44 cdboy
自动编号还是不错
回复 引用 查看
#6楼 2011-08-24 11:44 老干部灰太狼
ilist webgridcolumns = new list();在@grid.gethtml(...)是报错cannot convert from 'system.collections.ilist' to 'system.collections.generic.ienumerable';
controller中this.viewmodel.showcolumns = showcolumns;找不到viewmodel;
新手,请指教
回复 引用 查看
#7楼 2011-11-30 10:33 腾飞刘
下面是webgrid生成的jquery ajax paging 代码,我们可以看到,它会把查询条件以routing的形式进行传递,从而保证可以在查询结果中进行paging.
请问这是如何实现的?
另外如何排序?
刷新评论列表刷新页面返回页首
发表评论
昵称: [登录]
[注册]
主页:
邮箱:(仅博主可见)
验证码:看不清。
换一个
评论内容:
记住我的昵称和主页
-->
登录注册
[使用ctrl+enter键快速提交评论]
0
1915211
qsa4qntvqco=
首页博问闪存新闻园子招聘知识库
最新it新闻:
·ios 5.1 beta3文件预示未来 siri有可能支持 ipad和 ipod touch
·android平台12月广告浏览份额51.6% 超越ios
·测试版ios源代码显示ipad 3或将支持siri
·斯蒂芬·霍金的新电脑
·京东商城2.95亿竞得北京商业地一块
» 更多新闻...
最新知识库文章:
·javascript 面向对象编程
·持续集成之“everything is code”
·持续集成之“软件自我识别”
·持续集成之戏说check-in dance
·什么是闭包。
我的理解
» 更多知识库文章...
china-pub 2011秋季教材巡展
china-pub 计算机绝版图书按需印刷服务