AjaxPro客户端框架总结
由于微软构建asp.net 2.0时对ajax技术的不重视,在04、05年ajax风起云涌之时,在asp.net出现了AjaxPro这个Ajax框架,虽然随着asp.net ajax的发布,AjaxPro被强大的asp.net ajax的光芒覆盖,但AjaxPro的简单易用性方面还是非常不错的。
AjaxPro在客户端会输出三个Core.ashx、Converter.ashx和Prototype.ashx三个文件,其实就是javasript文件。其中Prototype.js对Object建立了extend,然后在extend上增加了Apply和Bin方法,之后的Ajax调用的核心文件Core.ashx就是基于extend上进行的。Prototype.js里对Array,String进行扩展并增加了2个事件方面的方法addEvent与removeEvent方法。
Array对象扩展:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | push: function (o) { this [ this .length] = o; }, addRange: function (items) { if (items.length > 0) { for ( var i=0; i<items.length; i++) { this .push(items[i]); } } }, clear: function () { this .length = 0; return this ; }, shift: function () { if ( this .length == 0) { return null ; } var o = this [0]; for ( var i=0; i< this .length-1; i++) { this [i] = this [i + 1]; } this .length--; return o; } |
String对象的扩展:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | trimLeft: function () { return this .replace(/^\s*/, "" ); }, trimRight: function () { return this .replace(/\s*$/, "" ); }, trim: function () { return this .trimRight().trimLeft(); }, endsWith: function (s) { if ( this .length == 0 || this .length < s.length) { return false ; } return ( this .substr( this .length - s.length) == s); }, startsWith: function (s) { if ( this .length == 0 || this .length < s.length) { return false ; } return ( this .substr(0, s.length) == s); }, split: function (c) { var a = []; if ( this .length == 0) return a; var p = 0; for ( var i=0; i< this .length; i++) { if ( this .charAt(i) == c) { a.push( this .substring(p, i)); p = ++i; } } a.push(s.substr(p)); return a; } |
String对象还增加了2个静态方法:
1 2 3 4 5 6 7 8 9 10 11 12 | format: function (s) { for ( var i=1; i<arguments.length; i++) { s = s.replace( "{" + (i -1) + "}" , arguments[i]); } return s; }, isNullOrEmpty: function (s) { if (s == null || s.length == 0) { return true ; } return false ; } |
可以看到扩展的方法都是C#风格的,使得在javasript中能如C#中一样进行字符串与数组操作。 更重要的是Converter.js中增加了DataTable、DataSet、Dictionary和NameValueCollection,使得我们可以在客户端组装以上对象并在需要的时候发往服务端。可以想象在服务端的ajax方法接受一个DataTable类型的参数,那是如何的愉快。
一、DataTable
客户端代码:
1 2 3 4 5 6 7 8 9 10 11 | function SendDataTable() { var dataTable = new Ajax.Web.DataTable(); dataTable.addColumn( "id" , "System.Int32" ); dataTable.addColumn( "name" , "System.String" ); var row = new Object(); row.id = "001" ; row.name = "xiaopang" ; dataTable.addRow(row); var ret = ZyYz_Default.HanderDataTable(dataTable); alert(ret.value); } |
服务端代码:
1 2 3 4 5 6 7 8 9 | [AjaxPro.AjaxMethod] public int HanderDataTable(DataTable dataTable) { foreach (DataRow dataRow in dataTable.Rows) { //do somethig... } return 1; } |
二、DataSet(基本同DataTable,只是类型为Ajax.Web.DataSet)
三、Dictionary:
客户端代码:
1 2 | function SendDictionary() { var dictionary = new Ajax.Web.Dictionary( "Dictionary<string string=" ">" , [[ "004" , "xiaopang" ], [ "005" , "xiaopang005" ]]); dictionary.add( "006" , "xiaopang006" ); alert( "是否存在005元素:" + dictionary.containsKey( "005" ) + "值为:" + dictionary.getValue( "005" )); var ret = ZyYz_Default.HandDictionary(dictionary).value; alert( "Dictionary元素数目:" + ret); }</string> |
服务端代码:
1 2 3 4 5 | [AjaxPro.AjaxMethod] public int HandDictionary(Dictionary< string , string > dictionary) { return dictionary.Count; } |
四、关于直接传递Class
服务端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class TestClass { public int Id{ get ; set ; } public string Name { get ; set ; } } [AjaxPro.AjaxMethod] public TestClass GetTestClass() { return new TestClass{ Id =002,Name= "oldXiaoPang" }; } [AjaxPro.AjaxMethod] public TestClass PutTestClass(TestClass testClass) { testClass.Id = 003; return testClass; } |
客户端代码:
1 2 3 4 5 6 7 | function GetTestClass() { var testClass = ZyYz_Default.GetTestClass().value; testClass.Name = "newName" ; var newTestClass = ZyYz_Default.PutTestClass(testClass).value; alert( "原Id为:" + testClass.Id + " 现Id为:" + newTestClass.Id); alert( " 现Name为:" + newTestClass.Name); } |
关于core.js的ajax核心方法还没有仔细看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述