手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

.Net环境下基于Ajax的MVC方案[1]

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  1、问题背景

  现在,越来越多人开始尝试基于Ajax进行无刷新的Web研发,但是,在.Net环境下,应用Ajax并不是很方便,这主要可能是由以下一些原因造成的:

  ·由于Ajax基于javascript的本质,使得研发者必须对javascript很了解,起码,其javascript能力足以实现对callback返回内容对页面的更新,所以研发的门槛就有一定程度的上升

  ·当基于Ajax机制进行研发时,原有的基于postback方式下时,asp.net由后台逻辑代码(Model),aspx页面(View)、aspx.cs(Controller)构成的MVC构架其实失效了,当callback返回数据时,要么在client端用javascript解析返回内容以实现更新,要么则必须在server端构造好比较完整的html代码,再直接由javascript将该构造好的html配置给某个页面对象,很显然,这样一来,要实现一个最简单的callback功能,都要不少代码,并且是相对比较乱的代码,即使在即将到来的asp.net2.0该问题依然不会得到有效解决

  2、本文目的

  本文旨在充分利于现有的asp.net本身的特点和ajax的特性,提出一个用于在asp.net环境下进行基于ajax的web研发的MVC方案,以实现以下主要目的:

  ·Asp.Net环境下用于Ajax的清楚的MVC构架

  ·降低编程人员对过多javascript编码的依赖以降低编程门槛

  ·灵活的支持ajax模式下的常用研发方式

  3、问题分析

  如何实现以上几个主要目的呢?

 1)要对xmlhttprequest对更良好的封装,以使调用方式更简单;

 2)尽量在server端进行更新数据的构造,但是也要避免每次返回数据都手工构造,因此,就想到能够充分使用UserControl,由UserControl作为"View",对应的由ascx.cs文档作为"Controller",这样构成的MVC也是比较清楚的;
 
 4、问题解决

  基于以上思想,本人实现了以下一个组类库以简化该过程:

  源码及范例下载

  代码简析:

  1)首先在client端,AjaxHelper.js封装了xmlhttprequest,并提供一个将现有的<form>序列化为形如param1=v1&param2=v2&...形式用于post的参数;

  Updater(ajaxTemplate, output, params, onComplete)函数,用于实现一次callback调用

  ajaxTemplate(必选):指定执行需要功能的UserControl路径
  output(可选):填充返回数据的指定标签的引用或ID值
  params(可选):形如param1=v1&param2=v2&...的post参数
  onComplete(可选):可用于对返回数据进行特别处理的回调函数,函数格式  function(str),str为返回的数据

  SerializeForm(form)函数,用于序列化<form>

  form:能够是对指定<form>的引用或ID值

  2)在server端,Ajax.aspx文档封装了对由客户端ajaxTemplate指定的UserControl的调用,其余的具体逻辑功能则在特定的UserControl及其ascx.cs内实现;

  3)这样,具体执行一次callback时,编程人员只需在页面引用AjaxHelper.js,并在指定的位置通过javascript:Updater(ajaxTemplate, output, params, onComplete)进行调用,假如需要对某一form进行提交,则可调用javascript:SerializeForm(form)序列化该form并传给params,当然也能够手动构造params,并指定将返回数据通过配置output应用的页面或通过onComplete自定义处理。

  4)由于充分使用UserControl,意味着,能够充分利用asp.net原有的web服务器端控件和数据绑定机制,这样其实,已很大程度上简化了返回数据的构造,在ascx.cs中,通过Request.Form[ParamName]就能访问到client端传入的params,再访问逻辑代码获取源数据。

  5、范例

  包含在源码中的范例实现了一个简单的无刷新获取博客园首页内容到一个textarea的功能,详见源码!

[1] [2]




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS