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”将自动关联调 

用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) 


本文标签: 数据 框架 表单 操作 实现