网站建设设计案例网站logo实验报告,汕头企业网站公司,如何获取公众号,邯郸市永年区做网站的公司现在#xff0c;越来越多人开始尝试基于Ajax进行无刷新的Web开发#xff0c;不过#xff0c;在.Net环境下#xff0c;应用Ajax并不是非常方便#xff0c;这主要可能是由以下一些原因造成的#xff1a; •由于Ajax基于javascript的本质#xff0c;使得开发者必须对javasc…现在越来越多人开始尝试基于Ajax进行无刷新的Web开发不过在.Net环境下应用Ajax并不是非常方便这主要可能是由以下一些原因造成的 •由于Ajax基于javascript的本质使得开发者必须对javascript非常了解起码其javascript能力足以实现对callback返回内容对页面的更新所以开发的门槛就有一定程度的上升 •当基于Ajax机制进行开发时原有的基于postback方式下时asp.net由后台逻辑代码Modelaspx页面(View)、 aspx.cs(Controller)构成的MVC构架其实失效了当callback返回数据时要么在client端用javascript解析返 回内容以实现更新要么则必须在server端构造好比较完整的html代码再直接由javascript将该构造好的html设置给某个页面对象很 显然这样一来要实现一个最简单的callback功能都要不少代码并且是相对比较乱的代码即使在即将到来的asp.net2.0该问题依然不会 得到有效解决 本文目的 本文旨在充分利于现有的asp.net本身的特点和ajax的特性提出一个用于在asp.net环境下进行基于ajax的web开发的MVC方案以实现以下主要目的 •Asp.Net环境下用于Ajax的清晰的MVC构架 •降低编程人员对过多javascript编码的依赖以降低编程门槛 •灵活的支持ajax模式下的常用开发方式 问题分析 如何实现以上几个主要目的呢 要对xmlhttprequest对更良好的封装以使调用方式更简单 尽量在server端进行更新数据的构造但是也要避免每次返回数据都手工构造因此就想到可以充分使用UserControl由 UserControl作为View对应的由ascx.cs文件作为Controller这样构成的MVC也是比较清晰的 问题解决 基于以上思想本人实现了以下一个组类库以简化该过程 首先在client端AjaxHelper.js封装了xmlhttprequest并提供一个将现有的form序列化为形如param1v1param2v2...形式用于post的参数 Updater(ajaxTemplate, output, params, onComplete)函数用于实现一次callback调用 ajaxTemplate必选指定执行需要功能的UserControl路径 output可选填充返回数据的指定标签的引用或ID值 params可选形如param1v1param2v2...的post参数 onComplete可选可用于对返回数据进行特殊处理的回调函数函数格式function(str)str为返回的数据 SerializeForm(form)函数用于序列化form form可以是对指定form的引用或值 在server端Ajax.aspx文件封装了对由客户端ajaxTemplate指定的UserControl的调用其余的具体逻辑功能则在特定的UserControl及其ascx.cs内实现 这样具体执行一次callback时编程人员只需在页面引用AjaxHelper.js并在指定的位置通过javascript: Updater(ajaxTemplate, output, params, onComplete)进行调用如果需要对某一form进行提交则可调用javascript:SerializeForm(form)序列化该 form并传给params当然也可以手动构造params并指定将返回数据通过设置output应用的页面或通过onComplete自定义处理。 由于充分使用UserControl意味着可以充分利用asp.net原有的web服务器端控件和数据绑定机制这样其实已经很大程度上简化了 返回数据的构造在ascx.cs中通过Request.Form[ParamName]就能访问到client端传入的params再访问逻辑代码 获取源数据。范例 包含在源码中的范例实现了一个简单的无刷新获取博客园首页内容到一个textarea的功能详见源码 部分范例源码Default.aspx % Page languagec# CodebehindDefault.aspx.cs AutoEventWireupfalse InheritsCN.Teddy.AjaxHelper.WebForm1 % !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN HTML HEAD titleWebForm1/title meta nameGENERATOR ContentMicrosoft Visual Studio .NET 7.1 meta nameCODE_LANGUAGE ContentC# meta namevs_defaultClientScript contentJavaScript meta namevs_targetSchema contenthttp://schemas.microsoft.com/intellisense/ie5 script typetext/javascript languagejavascript srcjs/AjaxHelper.js/script /HEAD body form idForm1 methodpost runatserver div idview2loading /div script typetext/javascript Updater(AjaxTemplate/GetPageSrc, view2, urlhttp://www.cnblogs.com); /script /form /body /HTML AjaxHelper.js摘要 var AjaxHelperUrl new String(Ajax.aspx); var Updater function(ajaxTemplate, output, params, onComplete) { if (typeof output string) { output $(output); } new Ajax.Request( Ajax.aspx, { onComplete: function(transport) { if (output ! null) { output.innerHTML FormatContent(transport.responseText); } if (onComplete ! null) { onComplete(FormatContent(transport.responseText)) } }, parameters: params AjaxTemplate ajaxTemplate }); } var SerializeForm function(form) { return Form.serialize(form); } var FormatContent function(str) { var content new String(str); var prefix new String(!--AjaxContent--); content content.substring(content.indexOf(prefix, 0) prefix.length, content.length - 9); return content; } UserControl GetPageSrc.ascx.cs摘要 private void Page_Load(object sender, System.EventArgs e)...{lbUrl.Text Request.Form[url];System.Net.WebClient client new System.Net.WebClient ();client.Headers.Add(User-Agent, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322));try ...{txtPageSource.Text new System.IO.StreamReader(client.OpenRead(lbUrl.Text), System.Text.Encoding.UTF8).ReadToEnd();} catch(Exception ex)...{throw ex;} } 转载于:https://www.cnblogs.com/conglaile/archive/2007/08/11/851686.html