tempad
ReadyGo!技术成就梦想 >>Ajax教程 >> 基于css样式绑定的样式驱动式AJAX程序开发(.net实现)

基于css样式绑定的样式驱动式AJAX程序开发(.net实现)

ReadyGo!技术成就梦想 网络搜索 efish 2008-2-24 2:51:34

序言:
     前面我介绍了我做的.net版的Ajax库(.NET下的简单AJAX处理库 ),现在要介绍的是一种开发模式:样式绑定式驱动开发。
     样式驱动是我自己命名的,(我也不知道它叫什么,嘿嘿)以便区别目前的请求驱动式开发(如struts、webwork等)和事件驱动式开发(如asp.net、JSF等)。
正文:
1  简介
   首先,让我们来看看传统的WEB开发流程:
   ·请求驱动:   最常见的一类WEB框架实现了以请求驱动的流程。一个HTTP请求近来,被一个通用的分发器Servlet
(Dispather Servlet)分析,再被分发到一个对应的应用处理器。处理器依次处理UI特有的控制逻辑,调用业务对象和处理会
话状态,准备一个模型,再转发到视图。
   ·事件驱动:   事件驱动框架的设计目标是将桌面UI编程中著名的事件驱动模式搬到WEB环境中来。其特征是;对于如何将
表单提交到URL、如何将URL映射到控制器这些问题它们不关心;在事件驱动的框架中,表单组件和监听器联系在一起,监听器
通过事件开调用。而且,这类框架通常不打算实现可插拔的试图技术来呈现给特定的模型对象,而是把WEB页看作一写列界面组
件的组合物,每个组件可以保持自己的状态,并且知道如何呈现自己,甚至可能使用不同界面皮肤。
   从上面可以看到一个是传统的MVC架构是开发,一个是以页面为中心的快速应用开发(RAD)两者各有各的好处。
  
   样式驱动式开发在请求驱动开发或事件驱动开发的基础上进行简单的封装,在界面层融合了以上两者概念优势,它以最前台
的界面层为基础,通过CSS样式或HTC事件绑定界面元素来执行相应后台业务,从而达到执行相应请求,处理相应的事件的目的

   样式驱动的优势在于只需把前台元素赋予特定的样式,即可实现特殊的动能以及特定的业务处理,从而减少编码量和编译的
次数,具有“一次编写,到处绑定”的特点。比传统开发复用性更强。尤其是在AJAX大行其道的今天,在请求驱动框架或事件
驱动现有框架的基础上利用样式绑定式开发基于AJAX的应用,你会发现你的AJAX程序的开发效率会提高很多,尤其是当反复应
用同一(或相似)后台逻辑的情况会更明显,同样,样式绑定式开发对于面向服务式开发也具有很大的优势。
   
2  基于ASP.NET的样式驱动开发                    
  
   样式驱动的操作不依赖与后台实现,asp.net的runat=server可以魔法搬地将前台元素转化为后台的元素,不过这样的转化
依赖于特定的元素和后台,比如<input type=text runat=server> 这样确实是将input元素扩展成后台可以使用的服务器元素
了,但是对于后台来讲他要在页面对应的里进行特定的处理,而且input type=text只能是input type=text也不可能扩展自己
的功能。样式驱动则可以把一切元素、控件或控件中的元素利用JS的强大功能在前台转换为你想要的功能和效果,然后再送入
原请求或自定义请求,从而弥补asp.net的一些不足,“一次编写,到处绑定”的特点也为我们省去了多个页面类写重复代码的
诸多困扰。
   
    也许你会说不是有用户控件吗,很抱歉,用户控件跟前台严重耦合,你将它拿到一个项目中也许派不上一点用场。

    那WEB控件库呢?虽然能重用,跟用户控件比不耦合了,但是局限性太强,复杂度高,我觉得叫一个普通程序员写一个带模
板项的DataGird能排序的,可以删除、修改、上移下移]可以查看详细信息的控件出来是一件很费事的事。

    又有人说了,真笨,我直接拖一个DATAGRID然后再这个基础上加按纽,模板列,排序,详细连接好不好啊,还用特意做个
控件吗?有很抱歉的告诉你,如果是1000个DATAGIRD,每一个都有这些功能的一种或几种,那么你后台够写的了,即使你抽象
出一层、封装出一个专门的DataGirdBuilder类,也够复杂的,各种重载方法,晕。

    那么使用样式绑定式的开发就简单了,给DataGird个排序的样式(比如CssClass=sort),后台几句代码,或者干脆不写(
你的准备比较充足),就可以了,再加个列变为删除按钮(比如其中的一个列里ItemStyle CssClass="delbtn"),就可以了,
别的DataGrid不需要排序,那么样式去掉。而后页面类里干干静静。样式绑定后变化的元素传值到统一的业务对象进行处理,
一切都很规矩。

3  实现
   利用我之前做过的AJAX库,再结合javascript脚本构建一个这样的库不成问题。自然,跟做烧饭做菜一样,这里选料非常的
重要,这里我要选用来自Dean Edwards和Tino Zijdel的事件操作脚本库(common.js)和Neil Cro~~~~y制作的样式基本操作库(
css.js)来做好我们这道美味,噢,当然,还有大名鼎鼎的prototype.js库.
  
  
   好了,,前台的制作工序基本完成。
   然后就是利用我前一阵子做的AJAX库了。
   假设是删除,QueryString: command=delrow&JS生成的参数……
   则后台调用AjaxDelRow.cs

protected override void DoAjax()
...{
  // 搜集参数
  string parlist = request.Params;
  string paritempart = paritem.Split("^");
   hash.Add(paritempart,paritempart);
  }

  bool isDeled = false;
  string table = request.Params;
                // 判断来源
  if(table!=null)
  ...{
                if(table.Equals("dgBigclassmanage"))   //DATAGRID的ID号
                ...{  
   // 调用对应业务外观的DAO来删除
   // hash为datagrid的第0列,假设第0列传过来是ID值
                    isDeled = (new BusinessFacade()).DeleteById(hash.ToString());
                }
                if(isDeled)
               ...{
                    Output("true");
                }
                else
               ...{
                        Output("false");
                 }
}
AjaxDelRow制作流程请参考.NET下的简单AJAX处理库

好了,完成删除,,那么所有对应这个业务的删除都可以由命名为dgBigclassmanage的某一元素通过绑定delbtn样式来执行删
除(当然,这样不科学,不过是DEMO嘛,如果是实际你可以在QueryString里多传一个参数,在到AjaxDelRow派发后再用进行二
次派发,然后以这个参数做标识就完美了)由于麻烦,,有兴趣的自己做吧。。  呵呵。

这个样式只依赖TABLE元素,所以DATAGRID、DATALIST、自己做的TABLE,自定义控件只要最后生成TABLE元素的控件都可以用。
   主要提供一个思想,跟代码制作的好坏无关。在.NET里轻量地使用样式绑定,在有AJAX应用的开发中效果很棒。你也可以自己去实现一个更优秀的轻量框架了。

增删改、上下移动记录样式绑定的JS:

      

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  上一页  下一页
责任编辑: efish 参与评论 查找更多:
相关文章
ajax进度条 ajax进度条
利用Asp.net Ajax异步获取xml文档内容 利用Asp.net Ajax异步获取xml文档内容
Ajax实现无刷新树 Ajax实现无刷新树
Ajax实现在textbox中输入内容,动态从数据库中模糊查… Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中
Ajax实现DataGrid/DataList动态ToolTip Ajax实现DataGrid/DataList动态ToolTip
Ajax简单示例之改变下拉框动态生成表格 Ajax简单示例之改变下拉框动态生成表格
AJAX支持的自动填充表单 AJAX支持的自动填充表单
AJAX如何与后台交互 AJAX如何与后台交互
Ajax联动下拉框的实现例子 Ajax联动下拉框的实现例子
利用AJAX技术实现网页无刷新进度条显示 利用AJAX技术实现网页无刷新进度条显示
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想