admin 管理员组文章数量: 1086019
2024年3月14日发(作者:powerbi和tableau)
……
PR06R^啊LANGUAGE …… 一…………… ……………………… …一 …… 一………… …- ……………一 一…
源挺 DWZ Asp
|
MvC 3
姚瀹涛
摘 要:详细介绍了以ASP.NET MVC 3为后台整合DWZ框架,实现Web应用程序的数据分页
显示、增、删、查、改、导出及表单验证等基本操作。
关键词:DWZ开源框架;ASP.NET MVC框架;RIA框架;Linq to SQL类
ASP.NET MVC是微软官方提供的开源MVC框架,因不推
荐使用ASP.NET服务器控件,增加了开发人员UI设计的难
度.为了提高开发效率.开发人员通常会选择整合成熟的
RIA框架来解决这方面的问题。DWZ就是这样一款国产的基
type=,text/javascript“></script>
<script src=“@Ur1.Content(” ̄/Scripts/dwz.min js“)“type=“
text/]avascript”charset= gb231 2“></script>
<script src=”@Ur1.Content(“~/Scripts/dwz.regiona1.zh。js“)“
ype=“ttext/javascript”><,script>
@ 读取dwz.lfag.xml实现DWZ框架的初始化 @
<script type=“text/javascript >
¥(functiOn 0{
DWZ.init(“dwz.frag.xml“,{
callback:function 0{
initEnvO;
}
于iQuery实现的Ajax RIA开源框架,完全开源,方便扩展,
轻量级,界面简洁实用;CSS和JS代码彻底分离,修改样式
方便;保留htTrIl的页面布局方式.支持HTML扩展方式调用
UI组件;只需懂htrnl语法不需精通JS,就可以使用Ajax整合
后台;基于jQuey,UI组件以jrQuery插件的形式发布,扩展
方便,很适合与ASP.NET MVC整合实现Web应用程序的快速
开发。
}):
下面以一个课题管理的实例片断详细介绍ASP.NET MVC
3与DWZ框架整合,实现Web应用程序常用的数据分页显示、
增、删、查、改、导出及表单验证等基本操作。
)):
</script>
</head>
其中dwz.min.js是DWZ框架库、jquery.validate.js是表单
1 在ASP.NET MVC 3项目中引用DWZ库
在Visual Web Developer 2010中新建一个ASP.NET MVC 3
Web Application空项目。删除项目中Content、SeritDS、View
验证插件、dwz.regiona1.zh.js是本地化脚本库,dwz.lfag.xnfl中
定义了一些dwz组件碎片和提示信息。需要初始化到DWZ环
境中。
穗蕊霉嘲翻 盈
端 t}婚 tl ’
各目录中的所有内容,替换为DWZ框架(实例使用dwz—ria一
1.4.3,下载地址:http://code.google.eom/p/dwz/downloads/list)中
的相关文件(如图1所示)。
在Controllers下新建控制器HomeContmller.为默认Action
添加同名视图Index,视图引擎选择Razor(CSHTML),空母版。
通过如下代码实现对DWZ库的引用:
<head>
簿箱藉萼I用
麟巍 # ・
鞋镳 彗姆l
¥
!
…....
t : 鳓
瓣
£溢 t4
f 娃t
姥 C糊竹en r
嚣泌1种 聪#
辩
8
誊 m“
键≥抽 j
。… … ,…
i
罐 籼z r 私确 thj :
@ 样式表引用 @
<¨nk href: @Ur1.Content(。一/Content/themes/default/style.
CSS )。reI=“stylesheet type="text/cSS。,>
蝴j ” i 7 l J
{虢 ! 姐 :
……
儡卉 壮
。~. .
¥
。
孵
塑t 壁 哪.
棚fi# 麟蕊参
<¨nk href= @Ur1.Content《”一,ContentJthemes/css/core.
CSS“) rel= stylesheet‘type=”text/css"/>
图1 DWZ框架文件
@ DWZ库文件引用 @
2 DWZ框架布局
cripts/jquery-1.7.1.min.
DWZ框架采用。DIV+CSS实现Web应用程序常用的“上
(LOGO)、左(菜单)、右(内容)、下(版权信息)”布局(如
<scrlpt src:。@Ur1.Content(
js )_type='tex埘avascript'></script>
<script src; @UrI.Content(  ̄/Scripts4query.validate )。
…… ………… ‘ …J’ …… 『
实用第一 智慧密集
… 一…… … … …一… … …
图2所示)。
<body 摧01I r婚 >
辔 贾黼端鼹蛐
<dis, 恬 IayoUT >
卿掰嬲上都蛐
遗 ,1 ‰ 铺 t … e.|”鱼
舢爱法粥荤 瞎
4l l氇 3 e | x | I,… 3
毋卓档德内馨墙
t ≮ 0 lt t … }
</dlv>
舢腻¥ 麟授隐慰 舜
<:/iv 壮 t'OOte >ASP.髓t 揭开源撰勰B z蝌虢台应用</div>
</body>
图2 DWZ框架布局
左边菜单要实现折叠效果,还需在“leftside”中加入如下
代码:
@ 左边收缩条 @
<div id=“sidebar s”>
<div class=”collapse ‘>
<div class=”toggleCollapse“>
<div></div>@ 此处必须保留 @
</div>
</div>
</div>
更详细的布局代码可参见示例源码布局效果如图3所示。
DWZ-ASPI懈删 呒 i 誊| i 笺 i
ll* I 秘n囊 ≮强 。置 麓 壤囊穗 鬟
j : 开撵框架D1Ⅳz与A|}P 辩ETMVc 3的整台馥甩
{
砖
酾0 狮㈣ c瑚* 酬
图3 DWZ布局效果图
3 DWZ框架常用组件与ASP.NET MVC整合
DWZ框架提供了常用的、使用Html扩展方式调用的web
应用程序uI组件和 ax表单,无需开发者熟悉Javascript便
能快速完成客服端的开发。下面介绍Table分页组件、Ajax表
单整合ASP.NET MVC 3后台实现数据的验证、增、删、查、
改、导出等基本操作。
3.1 建立数据Models
在Visual Web Developer 2010集成环境中新建SQL Server
数据库MRSMIS—DB,表Tb—Rsinfo结构(如图4所示)。为
MVC项目建立Models.选择Linq to SQL类,并命名为
26 与|I|
MRSMISMode1.dbml。
图4 Tb-Rsinfo表结构
3.2 Table分页组件
在Models中建立数据操作类SMRepository.并设置分贞相
关属性.代码如下:
public int NumPerPage{get;private set;)
//每页显示记录数
public int PageNum{get;private set;) ∥当前页
public string OrdName{get;private set;) ,/排序字段
pub{ic string DirectName{get;private set;)//升、降序
public int TotaICount{get;private set;) //记录总数
在Controllers中建立一个PageList方法.并为其添加视图。
视图布局主要南4部分组成如图5所示。
鼢王鼹拦蛐
… … : …~ ~ ~
i i | ~ 臻 1 2 l 差馥
辔毫势据鏖最躐事诤
照 …~j : 挚 : ;
舡势贾糍铡匮璃
姥姥 肆味 毒罄 话-豁|l棼 鞋 》…||毳|;。
触淞握分疆踌藏巍壤蛐
图5添加视图
数据显示区由扩展的Table标签组成,主要代码如下:
<table class= tist“width=”98%“targetType=“navTab“asc=“
asc“desc= desc‘‘>
<thead>
<tr>
<th><input type=”checkbox。。group=“ids”class=
checkboxCtrl”><Ah>
<th orderFietd=“rsnum class=“@Mode1.
DirectName >课题编号</th>
<th>课题名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@foreach(var rs in Mode1.SubjectInfoList())
{
<tr target= sid—user rel= @rs.I D”>
<td><input name=“ids“value=”@rs I D”type=“
checkbox ><Ad>
……
PROGRAM LAHGU^B ……………………… ……………………一…………………………………………F
<td>@rs:rsnum</td>
……
</tr>
)
</tbody>
</table>
其中,表头中加入orderField=”rsnum”class ”@Model・
DireetName”表示该列可点击进行升、降排序。数据的显示是
通过foreach完成,调用在数据操作类SMRepository中的查询
方法SubjectInfoList 0,此方法用Linq to SQL语句对数据表分
丽根取.
var si:smdb.ExecuteQuery<Tb Rsinfo>
(一seIect*from Tb.Rsinfo order by ii+
OrdName+n。+DirectName):
return si.Skip((Page}Num 一 1) NumPerPage).Take
(NumPerPage);//返回分页数据
//s“分页控制区”MR
<div cl
印o
ass=“pagi
sitory中设置 属性)
孳 季 传递过来的数据(
nation”targetType=”
。
在数据操作类
navTab“t0taI
+ +n .
Count=”
@ModeI.T0taICountl_numPerPage=一@Mode1.NumPerPage n
pageNumShown=-5n currentPage="@ModeI.PageNum”>《/
div>
客户端对分页组件的操作通过“数据分页隐藏表单”提交
相关分页数据,代码如下:
<form id= pagerForm“method="post。action="/Home/
PageList“>
<input type= hidden”name=“pageNum value=“
@M0deI.PageNum />
<input type= hidden。name: numPerPage value=”
@Mode1.NumPerPage ,>
<input type=,hidden name:“orderField,value=
@Mode1.OrdNamen l>
<input type=“hidden name= orderDirection value=”
@Model。DirectName />
</form>
在Controlls中的PageList方法将接收表单数据,然后通过
数据操作类SMRepository的构造函数来进行相关处理,代码
如下:
int pageNum=Conve ̄.Tolnt32(Request【“pageNum“】);//当前
ll
int numPerPage=Convert.Tolnt32(Request["numPerPage"]);
每页显示记录数
string ordName=Conve ̄.ToString(Request["orderField"]);
fi赫芹字段
string directName=ConveR.ToString(Request[“orderDirecti
off 】):∥升、降序
ordName:String.1sNullOrEmpty(ordName)7"rsnum":
ordName;
directName=String.IsNullOrEmpty(directName)7 Has :
directName;
SMRepository smr=new SMRepository(pageNum.numPer
Page l ordName,directName);
return View(smr):
另外, “分页控制区”每页显示记录数的选择是通过select
表单来完成
,
为使当前选择不被刷新,可用JQuery代码¥(”
select"1
.
val f・・@Mode1.NumPerPage")来设置当前值:
<seIect class:ncOmbox name:・・numPerPage“onchange:u
navTabPageBreak({numPerPage:this.value})”>
<option value= 20”>20</option>
<option value= 50“>50</option>
…‘
在DWZ框架中有两种页面呈现方式,navTab以主页标签
方式显示,dialog以弹出对话框的方式显示。这里将在
PageList页面用navTab方式显示,在Index页面通过如下代码
来调用PageList页面
。
其中,target:“navTab”将自动关联调
I
用nd.vTab组件,使该页以主页标签方式显示,rel:为 a
~
D值,后续可 用来重载该页面时使用:
tab的
’ 。、
<Ii><a href=”@UrLContent(“-/Home/PageList")“target=”
navTab”rel="menu
—
PageList >
课题列表</a></
3.3 Ajax表单提交
DWZ框架默认使用Ajax表单提交并返回json数据,告诉
客户端操作是否成功或失败等提示信息,以及成功后的处理方
式(刷新某个navTab或关闭某个navTab或navTab页面跳转)。
Ajax表单提交后自动调用默认回调函数validateCallback
fthis),提示操作成功或失败。如果提交后如果需要重新加载某
个navTab或关闭dialog可以使用navTabAjaxDone或
dilaogAjaxDone(如果表单在navTab页面上使用navTabAjaxDo
Be,在dilaog页面上使用dialogAjaxDone)方法,实现代码:
<form … onsubmit="return vafidateCaIIback(this,
diaiogAjaxDone)”>…
如果需要做其他处理也可以自定义一个回调函数xxx+
AjaxDone。
在Controllers中建立一个AddSubject方法.实现将表单数
据添加至数据库,并返回客服端jSOll数据,主要代码如下:
string subjectNum=Convert.ToString(Request[。subjectNum”】):
SMRepository smr=new SMRepository0;
.f{f String,IsNulIOrEmpty(subjectNum))
{
try
{
礁Rsinfo si:new礁Rsinfo0
si.rsnum≈subjectNum;
sm¨nse ̄Subject(si);
淼
I、 一 1j’1 1I_ ~
实用第一 智慧密集
‘ H. Ib ^_ Y ¥
smr.Save()
)
return Json(new{statusCode= 200“,message=”课题添加
成功!“,navTabld=”menu
—
PageList“ callbackType=
closeCurrent“)):
∥返回重新加载 menu—PageList”页面
)
返回的ison数据中,statusCode表示操作状态(框架分别
定义了200、300、301,分别表示操作成功、失败、超时)、
message表示返回提示信息、navTabld指定要重新加载的
navTab页面、callbackType指定回调方法(示例中关闭当前添
加记录对话框),另外还包括forwardUrl指定跳转页面等。与
其对应的AddSubjeet视图主要代码如下:
<div class=’。pageContent。‘>
<form method= post action。”@Ur1.Content(I_~/Horne/
AddSubject“)“
onsubmit=”return vatidateCalIback(this,
dialogAjaxDone)“>
<div class=”pageFormContent。‘layoutH=“56。。>
<D>
<label>课题编号:</label>
<input type= text name=。’subjectNum”
size=“30”maxlength=”30“class=”required”,>
</P>
<D>
<label>申请时间:</label>
<input type=“text name=“subjectReq
uest”class=“date“size=“30“yearstart=…0 yearend=“50“
value= 201 2-03-01“date= true'/>
<a class=”inDutDateButton”href=“javascript:;”>选择</a>
</p>
</div>
<div class=”formBar”>
<u}>
<li><div class=”buttonActive”><div
class= buttonContent“><button type=“submit“>添加</
button></div></div></li>
</ul>
</div>
</form>
</div>
在该视图中,使用了DWZ框架自带的日期组件(“申请时
间”的黑体字部分),表单验证采用了jquery.validate插件(版
本1.9,使用方法可参阅相关文档)。页面的调用使用超链接的
扩展方式:
<a href=”@Ur1.Content(  ̄/Home/AddSubject“) target=“dialog
“20 12.
与雉
resizable= false“mask:“true”maxable=。‘false“width=‘‘51 8‘ 。
height=。’284 rel=“menu
_
AddSubject。。>
扩展属性中,resizable、mask、maxable、width、height分
别设置对话框能否改变大小、模式、显示最大化按钮、宽、高
等参数(如图6所示)。
鼍氅 辩辣蚤j麟 疆 |g棼嚣 《 罐 瓣 《 强 。 b * ÷。 秘 。l 。 _
攥趣躺母:程辨{茹001
鼹名称: 静霄辎磷 鼯管蛰壤鏖
攥鼗盎瓣^:
谦题粪蹦: 载撵鼹
漱s喊: 2012—03-0t 憩
狂l 蛾搬
图6 Aiax表单设计
编辑记录和添加汜录操作类似.所不同的是编辑 录要注
意获取当前记录的方式,限于篇幅不再赘述,可详见所附示例
源码
3。4 Ajax链接扩展
前面已经用到navTab和dialog链接扩展.除此之外,
DWZ框架还定义丁常用的Ajax链接扩展.如ajaxTodo、
selectedTodo、dwzExport等.这些属性会自动关联相应的Ajax
操作.在一些对动作查询中使用起来 分方便。其中,
target=”selectedTodo”便会自动关联在前面分页组件中:
<input type=”checkbox“group=”ids”class=”checkboxCtrl“>
代码及相关Ajax操作,将表单数据提交服务器端,实现
删除所选记录的操作(如图7所示)。
_MVC 3黪蠡_虢l撼赫
遂 薅 舔电 : | |幔戳 l 一 |瀑 《|
爹il 祧 甏| 黼 鼗{羲辫 辩秘 溅麟 糍 燕|囊l 濑 。
图7删除记录的实现
在Controllers中的DelSubject方法中实现删除所选记录的
主要代码:
string ids:Convert.ToString(Request[”ids”】)
SMRepository smr new SMRepository0;
trV
{
smr.DeleteSubject(ids);
……
PROGRA啊LANGUAGE…一 … ………一 “ 一… …… ……一 - ……
MapPath(
“ …… r… 一 一一…… -… …r
smr.SaveO;
)
……
Ud.Content(“ ̄/ExptXls/ExptSubject.xls”));
string sheetNlame=“课题分页导出数据
SMRepository smr=new SMRepository0;
trv
return Json(new{statusCode=“200“,message=“操作员删
除成功!“,
navTabld:”menu
pageUst"))
删除所选记录的Linq to SQL语句:
nfo where I D
smdb.ExecuteCommand(“delete frOm Tb
Rsi
_
{
smr.E×portPage×Is(sqIStr,fileName,sheetName,
Convert.Tolnt32(pageNum),Convert.Tolnt32(numPer
Page));)
in《“+ids+“)“):
Ajax链接扩展target=”dwzExport”会自动绑定相应的
Ajax处理,将分页隐藏表单数据pageNum、numPerPage、
orderField、orderDirection提交服务器用于导出数据操作
<a class=“icon href=“@UrI.Content 《“ /Home/
return File(Ur1.Content(”WExptXls/ExptSubject.xls”),
application/-excet”,”ExptSubject.xls”);
导出xls的ExportPageXls方法详细代码详见示例源码。
ExptSubjectXIs' 1ll target= 'dwzExport targetTvpe=“navTab'
title=“确定要导出分页课题记录吗7“><span>导出EXCEL</
span></a>
除以上介绍之外。Ajax链接扩展还可以在返回时使用
callback(如callback=“mvhjaxDel”)属性自定义回调函数,
供熟悉Javascript的读者完成相关操作。
页面效果(如图8所示)
4 结语
事实上,DWZ框架的功能远不止此,许多功能强大的组
件(如suggest+lookup+主从结构等)及丰富的API函数在文中
图8数据导出
并未涉及。也许是DWZ框架诞生时间并不长,除官方提供的
手册和示例(基于PHP和Java后台)外,相关技术文档并不
targetType=”navTab”表示根据当期navTab页面中的
pagerForm参数导出,如果设置为“dialog”则根据当期dialog
多,并且其采用非“所见即所得”的方式来实现各种功能,也
使一些初学者较难上手。希望通过上文的介绍能让读者对开源
框架DWZ有所了解,并在项目中加以运用,特别是使用ASP, .
页面中的pagerForm参数导出。在Controllers的ExptSubjectXls
方法中将接收客户端数据完成导出xls文件的操作:
NET MVC做为后台的程序员。
public ActionR esult ExptSubjectXts(string pageNum,string
numPerPage,string orderField,
string orderDirection)
{
string sqlStr=“select frOm TbRsinfo order by“+
_
参考文献
【1】
DWZ富客户端框架使用手册.
orderField+一+OrderD_rectiOn:
y,等,著,冯飞译.ASP,.NET MVC 1.0高
【2】
(美)Rob Coner
级编程[M].清华大学出版社,2010.
(收稿日期:2012—03—14)
string fileName=System.Web.HttpContext.Current.Server.
j止 — L.址 .址.喜 .址.St.SIL
.
(上接第24页) 出版社
.
2008.
了工作效率;同时也使与备件相关的业务更加顺畅,提高了管
理水平。
【4】张洪举
芦桂章.SQL Server2005 At1、进阶与应用实例
北京:人民邮电出版社
2008.
,
.
王小科,梁冰,吕双.Visual C#2005程序设计自学手册.
参考文献
【1】施玉新,牛旭东.数据库原理及应用.北京:电子工业出
版社.2004.
北京:人民邮电出版社.2009.
王晟.Visual C#.net数据库开发.北京:清华大学出版
社.2009.
【2]管建军.软件工程.武汉:武汉大学出版社,2008.
【3】吴源.SQL Server2005数据库管理精讲.北京:电子工业
(收稿日期:2012.一03—16)
版权声明:本文标题:开源框架DWZ与ASP.NET MVC3的整合应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710377559a570330.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论