您的位置:首页 > 编程语言 > ASP

Asp.net Ajax框架教程

2008-01-10 23:00 211 查看
[align=center]Asp.net Ajax框架教程[/align]
[align=center][/align]
[align=center][/align]
目录
(一).概述...
(二).应用场景代码示例...
1).ScriptManager控件示例...
1. 在异步调用服务端注册客户端脚本新方法...
2. 捕获Ajax异步调用中错误(默认使用alert提示).
3. 捕获Ajax异步调用中错误(自定义输出错误方式)
2).UpdatePanel控件示例...
4. RenderMode属性用法示例...
5. UpdateMode用法示例...
6. ChildrenAsTriggers属性用法示例...
7. Triggers属性用法示例...
3). UpdateProgress控件示例...
8. 在异步更新时显示滚动进度条...
4). Timer控件示例...
9.在客户端无刷新定时执行服务端方法...
5). Ajax中新Validators控件用法示例...
10. Validators控件使用配置示例...
6). 在客户端请求服务端最基本的执行方式...
11. 使用Ajax library类库中的客户端WebReqest对象请求服务端...
7). 在客户端调用页面后台(Page behind)中方法...
12. 在客户端调用页面后台(Page behind)中方法示例...
8). 在客户端调用WebService中的服务端方法...
13. 调用WebService示例...
9). 错误回调处理...
14. 掌握客户端错误回调处理方法...
10). Ajax library客户端编程特性...
15. Asp.net Ajax框架中的客户端对象与服务端对象交互...
16.DataSet/DataTable/DataRow正反序列化JSON格式程序集使用...
17. 客户端类使用Sys.StringBuilder使用示例...
18. WebRequestManager对象的客户端事件示例...
11). 在Ajax操作中访问 Session-Cache-Application 对象...
19. 在WebService方法中使用Session/Cache/Application对象...
20. 在Page后台方法中使用Session/Cache/Application对象...
12). Ajax 客户端类库对现有 javascript对象的扩展功能...
21. 扩展Array对象方法forEach使用示例...
22. 对 JavaScript Function对象扩展, 注册事件新方式...
23. Ajax对String对象扩展方法String.format的使用...
13). 在Ajax library中的客户端面向对象(OO)功能...
24. 客户端注册命名空间, 定义接口, 类继承示例...
14). Asp.net Ajax 中的多语功能...
25. Asp.net服务端使用全局和本地资源文件示例...
26. Asp.net客户端使用全局和本地资源文件示例...

[align=left] [/align]
[align=left][/align]
[align=left](一).概述[/align]
[align=left][/align]
[align=left]此教程包括26个精简的小例子, 主要针对开发应用场景和功能点进行展开示例, 在实际开发中也可以作为查找手册使用. 注释都在每个示例中.[/align]
[align=left]Asp.net Ajax客户端对Ajax编程支持非常丰富, 因此使用起来比较灵活. [/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left](二).应用场景代码示例[/align]
[align=left][/align]
[align=left]1).ScriptManager控件示例[/align]
[align=left][/align]
[align=left]1. 在异步调用服务端注册客户端脚本新方法[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在服务端注册客户端脚本新方法 --> [/align]
[align=left] <!-- 通过Page.ClientScript实例注册客户端脚本方法在异步提交时不起作用. Microsoft采用ScriptManager实例, 并与Page.ClientScript方法一一对应的方法来实现此功能, 具体看示例后台代码. --> [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] 当前时间: <%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台服务端代码:[/align]
[align=left]public partial class _AA_ScriptManager_RegistClientScript_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] protected void Button1_Click1(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] //Ajax框架中新调用方式[/align]
[align=left] ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "UpdateSucceed", "alert('Update time succeed!')", true); [/align]
[align=left] [/align]
[align=left] //默认调用方式(在异步调用XmlHttp方式中无效) [/align]
[align=left] //Page.ClientScript.RegisterStartupScript(this.GetType(), "UpdateSucceed", "<script>alert('Update time succeed!')</script>");[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]2. 捕获Ajax异步调用中错误(默认使用alert提示)[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在Asp.net Ajax框架的异步调用中, 默认情况下不会直接拋出错误详细信息. 可以借助ScriptManager的OnAsyncPostBackError事件来实现 --> [/align]
[align=left] <!-- AllowCustomErrorsRedirect="false" 表示遇到错误不跳转到Web.Config中定义的错误处理页面[/align]
[align=left] <system.web>[/align]
[align=left] <customErrors mode="On" defaultRedirect="~/DisplayError.aspx"></customErrors>[/align]
[align=left] </system.web>[/align]
[align=left] 如果设置为true, 则出错时会自动将页面跳转到当前站点根目录下面的DisplayError.aspx页面.[/align]
[align=left] -->[/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="false" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台页面代码:[/align]
[align=left]public partial class _AA_ScriptManager_GetAsycError_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] protected void Button1_Click(object sender, EventArgs e)[/align]
[align=left] { [/align]
[align=left] int a = 5, b = 0;[/align]
[align=left] int c = a / b;[/align]
[align=left] }[/align]
[align=left] protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)[/align]
[align=left] {[/align]
[align=left] ScriptManager.GetCurrent(this).AsyncPostBackErrorMessage = e.Exception.Message;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]3. 捕获Ajax异步调用中错误(自定义输出错误方式)[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在Asp.net Ajax框架的异步调用中, 默认情况下不会直接拋出错误详细信息. 可以借助ScriptManager的OnAsyncPostBackError事件来实现 --> [/align]
[align=left] <!-- AllowCustomErrorsRedirect="false" 表示遇到错误不跳转到Web.Config中定义的错误处理页面[/align]
[align=left] <system.web>[/align]
[align=left] <customErrors mode="On" defaultRedirect="~/DisplayError.aspx"></customErrors>[/align]
[align=left] </system.web>[/align]
[align=left] 如果设置为true, 则出错时会自动将页面跳转到当前站点根目录下面的DisplayError.aspx页面.[/align]
[align=left] -->[/align]
[align=left] <!--注意add_endRequest方法不能写到<head></head>中, 因为这时ScriptManager实例还没有创建. 不好之处是方法写在<head></head>块中使页面有些乱.--> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="false">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel>[/align]
[align=left] [/align]
[align=left] <div id="divMessage" style="color:Red;"></div>[/align]
[align=left] <script type="text/javascript" language="javascript">[/align]
[align=left] Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e)[/align]
[align=left] {[/align]
[align=left] e.set_errorHandled(true); //表示自定义显示错误, 将默认的alert提示禁止掉.[/align]
[align=left] $get("divMessage").innerHTML = e.get_error().message; [/align]
[align=left] });[/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台服务端代码:[/align]
[align=left]public partial class _AA_ScriptManager_GetAsycDetailError_CustomDisplayError_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] protected void Button1_Click(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] int a = 5, b = 0;[/align]
[align=left] int c = a / b;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]2).UpdatePanel控件示例[/align]
[align=left][/align]
[align=left]4. RenderMode属性用法示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- RenderMode属性功能与Html标签的style.display属性作用一样, 只是UpdatePanel只有Block和Inline两种方式 -->[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Block">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel1(Display设置为Block)[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel2" runat="server" RenderMode="Block">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel2(Display设置为Block)[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel3" runat="server" RenderMode="Inline">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel3(Display设置为Inline)[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel4" runat="server" RenderMode=Inline>[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel4(Display设置为Inline)[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left]5. UpdateMode用法示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- UpdateMode属性可以设置为Always和Conditional两种方式. 默认情况下属性值为Always. --> [/align]
[align=left] <!-- 如果设置为Conditional, 则只有当前UpatePanel内部的元素(比如button)提交时, 才能引起当前UpdatePanel更新;-->[/align]
[align=left] <!-- 如果设置为Always, 则不管点击UpdatePanel内部还是外部的按钮都会使当前UpdatePanel更新 -->[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode=always>[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel1时间:<%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode=conditional>[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel2时间:<%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button2" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel>[/align]
[align=left] <br />[/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left]6. ChildrenAsTriggers属性用法示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- ChildrenAsTriggers属性可以设置为True或False. 默认情况下属性值为True. --> [/align]
[align=left] <!-- 如果设置为False, 则点击当前UpdatePanel中的元素不会引起当前UpdatePanel更新;但它可能会引起本UpdatePanel之外的页面局部更新. --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel1时间: <%= DateTime.Now %>[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode=conditional ChildrenAsTriggers="false">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] UpdatePanel2时间: <%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel>[/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left]7. Triggers属性用法示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- PostBackTrigger(AsyncPostBackTrigger)标记可以指定当前UpdatePanel之外的元素来对自己进行更新.不同:一个是一般页面提交, 一个是异步无刷新提交 --> [/align]
[align=left] <!-- 假如设置了UpdateMode="Conditional", 则只有点击当前UpdatePanel中的button才能更新本Panel中的内容. 如果想设置本UpdatePanel外的元素对本Panel内容进行更新, 则可以设置该属性. --> [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] 当前时间: <%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] <Triggers> [/align]
[align=left] <asp:PostBackTrigger ControlID="Button2" /> [/align]
[align=left] <asp:AsyncPostBackTrigger ControlID="Button3" />[/align]
[align=left] </Triggers> [/align]
[align=left] </asp:UpdatePanel>[/align]
[align=left] [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel2" runat="server">[/align]
[align=left] <ContentTemplate> [/align]
[align=left] <asp:Button ID="Button2" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel3" runat="server">[/align]
[align=left] <ContentTemplate> [/align]
[align=left] <asp:Button ID="Button3" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]3).UpdateProgress控件示例[/align]
[align=left][/align]
[align=left]8. 在异步更新时显示滚动进度条[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- UpdateProgress控件 --> [/align]
[align=left] <!-- AssociatedUpdatePanelID表示由哪个UpdatePanel来使自己呈现; --> [/align]
[align=left] <!-- DynamicLayout表示UpdateProgress是否固定占有一定空间,即使是隐藏时; 如果该值为true, 则只有显示时才占用页面空间. --> [/align]
[align=left] <!-- DisplayAfter表示显示UpdateProgress内容之前需要等待的时间. --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] [/align]
[align=left] <asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout=false AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="1000">[/align]
[align=left] <ProgressTemplate>[/align]
[align=left] <asp:Image ID="Image1" runat="server" ImageUr="~/(C)UpdateProgress/(8)UpdateProgress/Progress.gif" ImageUrl="~/(C)UpdateProgress/(8)UpdateProgress/Progress.gif" />[/align]
[align=left] </ProgressTemplate>[/align]
[align=left] </asp:UpdateProgress>[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] 当前时间: <%= DateTime.Now %>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]4). Timer控件示例[/align]
[align=left][/align]
[align=left]9.在客户端无刷新定时执行服务端方法[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Timer控件 --> [/align]
[align=left] <!-- 通过设置Interval值(毫秒)可以定期的更新页面; 可以配合UpdateMode来禁止某些UpdataPanle不更新. --> [/align]
[align=left] <!-- 如果把Timer置于UpdatePanel外面, 可以非异步提交整个页面. --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] 当前时间: <%= DateTime.Now %>[/align]
[align=left] <asp:Timer ID="Timer1" runat="server" Interval="1000">[/align]
[align=left] </asp:Timer>[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel>[/align]
[align=left] <%--<asp:Timer ID="Timer1" runat="server" Interval="1000">[/align]
[align=left] </asp:Timer>--%>[/align]
[align=left] <%--<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode=conditional>[/align]
[align=left] <ContentTemplate>[/align]
[align=left] 当前时间: <%= DateTime.Now %> [/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel>--%>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]5). Ajax中新Validators控件用法示例[/align]
[align=left][/align]
[align=left]使用VS 2005默认的验证控件在异步操作时会有些问题, 微软推出与现有控件名称一一对应的一系列验证控件[/align]
[align=left][/align]
[align=left]10. Validators控件使用配置示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Validators控件 --> [/align]
[align=left] <!-- Asp.net Ajax与VS 2005自带的系列验证控件在使用时,会有些问题.固Microsoft又推出一系列与原控件名称一一对应的控件集, 在bin目录的Validators.dll --> [/align]
[align=left] <!-- 另外, 还要在Web.Config中指定使用bin下面的Validators.dll中的验证控件:[/align]
[align=left] <system.web>[/align]
[align=left] <pages> [/align]
[align=left] <tagMapping>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Validators"/>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator, Validators"/>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.RangeValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator, Validators"/>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.RegularExpressionValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator, Validators"/>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator, Validators"/>[/align]
[align=left] <add tagType="System.Web.UI.WebControls.ValidationSummary" mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary, Validators"/>[/align]
[align=left] </tagMapping>[/align]
[align=left] </pages>[/align]
[align=left] </system.web> [/align]
[align=left] --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>[/align]
[align=left] <asp:RequiredFieldValidator ControlToValidate="TextBox1" ID="RequiredFieldValidator1" runat="server" ErrorMessage="不能为NULL!"></asp:RequiredFieldValidator> [/align]
[align=left] <br />[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="Button" />[/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]6). 在客户端请求服务端最基本的执行方式[/align]
[align=left][/align]
[align=left]11. 使用Ajax library类库中的客户端WebReqest对象请求服务端[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 使用客户端WebRequest类, 进行一个标准的Ajax请求示例 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] [/align]
[align=left] <script language="jscript" type="text/javascript">[/align]
[align=left] function ExecuteAjaxRequest(text)[/align]
[align=left] {[/align]
[align=left] var request = new Sys.Net.WebRequest();[/align]
[align=left] request.set_url('ClientWebRequest.ashx');[/align]
[align=left] request.set_httpVerb("POST");[/align]
[align=left] request.add_completed(onComplete);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] request.set_body('text=' + encodeURIComponent(text)); [/align]
[align=left] request.invoke();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function onComplete(response)[/align]
[align=left] {[/align]
[align=left] if (response.get_responseAvailable())[/align]
[align=left] {[/align]
[align=left] var text = response.get_object();[/align]
[align=left] alert(text);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] </script>[/align]
[align=left] [/align]
[align=left] <input type="button" value="Hello Word!" onclick="ExecuteAjaxRequest('Hello Word!')" /> [/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]处理程序ashx文件代码:[/align]
[align=left]using System;[/align]
[align=left]using System.Web;[/align]
[align=left] [/align]
[align=left]using System.Web.Script.Serialization;[/align]
[align=left] [/align]
[align=left]public class ClientWebRequest : IHttpHandler {[/align]
[align=left] [/align]
[align=left] public void ProcessRequest (HttpContext context) {[/align]
[align=left] [/align]
[align=left] context.Response.ContentType = "text/plain"; [/align]
[align=left] string text = context.Request.Params["text"]; [/align]
[align=left] [/align]
[align=left] JavaScriptSerializer jsSerializer = new JavaScriptSerializer();[/align]
[align=left] [/align]
[align=left] context.Response.Write(jsSerializer.Serialize(text));[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public bool IsReusable[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return false;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]7). 在客户端调用页面后台(Page behind)中方法[/align]
[align=left][/align]
[align=left]12. 在客户端调用页面后台(Page behind)中方法示例[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在开发中使用较多的情况, 在客户端调用当前页面的服务端方法. --> [/align]
[align=left] <!-- 设置ScriptManager控件的EnablePageMethods属性为:True, 并且在需要使用后台方法前加属性标记[WebMethod] -->[/align]
[align=left] <!-- 服务端方法必须为静态的, 需要客户端调用的才需要设置为静态的; -->[/align]
[align=left] <!-- 注意在服务端类中要打开命名空间using System.Web.Services, WebMethod类在此命名空间中-->[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />[/align]
[align=left] [/align]
[align=left] <input type="button" value="调用服务端方法" onclick="ExecuteServerMethod('ChengKing')" />[/align]
[align=left] [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function ExecuteServerMethod(value)[/align]
[align=left] {[/align]
[align=left] PageMethods.ReturnStringServerMethod(value,CallBackResult);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function CallBackResult(result)[/align]
[align=left] {[/align]
[align=left] alert(result);[/align]
[align=left] }[/align]
[align=left] </script>[/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left]页面后台服务端代码:[/align]
[align=left]using System.Web.Services;[/align]
[align=left]public partial class _G_Ajax_Visit_PageServer_Method_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] }[/align]
[align=left] [WebMethod][/align]
[align=left] public static string ReturnStringServerMethod(string str)[/align]
[align=left] { [/align]
[align=left] return "Hello " + str;[/align]
[align=left]}[/align]
[align=left]}[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]8). 在客户端调用WebService中的服务端方法[/align]
[align=left][/align]
[align=left]13. 调用WebService示例[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 如果WebService类代码在App_Code中, 则直接可以通过: 类名.方法调用; 否则, 要通过: 命名空间.类名.方法名称 调用. --> [/align]
[align=left] <!-- InlineScript=true表示在客户端把调用服务端生成的客户端代码脚本输出到页面上; 一般用于调试使用, 但肯定占用时间. -->[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server">[/align]
[align=left] <Services>[/align]
[align=left] <asp:ServiceReference Path="SimpleTransferWebservice.asmx" InlineScript=false />[/align]
[align=left] </Services>[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function showEmployee(str)[/align]
[align=left] {[/align]
[align=left] SimpleTransferWebservice.HelloWorld( [/align]
[align=left] str,[/align]
[align=left] onCompleted);[/align]
[align=left] } [/align]
[align=left] function onCompleted(response)[/align]
[align=left] {[/align]
[align=left] alert(response);[/align]
[align=left] }[/align]
[align=left] </script> [/align]
[align=left] [/align]
[align=left] <input type="button" value="Hello Word!"[/align]
[align=left] onclick="showEmployee(this.value)" />[/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]Webservice后台代码(*.asmx页面):[/align]
[align=left][WebService(Namespace = "http://tempuri.org/")][/align]
[align=left][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][/align]
[align=left][ScriptService][/align]
[align=left]public class SimpleTransferWebservice : System.Web.Services.WebService {[/align]
[align=left] [/align]
[align=left] public SimpleTransferWebservice () {[/align]
[align=left] [/align]
[align=left] //如果使用设计的组件,请取消注释以下行 [/align]
[align=left] //InitializeComponent(); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod][/align]
[align=left] [ScriptMethod][/align]
[align=left] public string HelloWorld[/align]
[align=left] (string str) {[/align]
[align=left] return str;[/align]
[align=left] } [/align]
[align=left]}[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]9). 错误回调处理[/align]
[align=left][/align]
[align=left]14. 掌握客户端错误回调处理方法[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 使用页面后台服务端方法则要把属性EnablePageMethods设置为True; -->[/align]
[align=left] <!-- 本客户端处理错误方式, 以及设置属性(set_timeout或Timeout), 同样应用于WebService方法也是可以的 -->[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods=true> [/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] [/align]
[align=left] <input type="button" value="一般错误异常" onclick="Division(1, 0)" />[/align]
[align=left] <input type="button" value="超时异常" onclick="Timeout()" />[/align]
[align=left] [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function Division(a, b)[/align]
[align=left] {[/align]
[align=left] PageMethods.Division(a, b, null, ErrorCallback);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function Timeout()[/align]
[align=left] {[/align]
[align=left] PageMethods.set_timeout(1000);[/align]
[align=left] PageMethods.Timeout(null, ErrorCallback);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function ErrorCallback(e)[/align]
[align=left] {[/align]
[align=left] var OupPutMessage = String.format("是否超时: {0}/n错误信息: {1}/n异常类型: {2}/n堆栈跟踪: {3}",e.get_timedOut(),e.get_message(),e.get_exceptionType(),e.get_stackTrace()); [/align]
[align=left] alert(OupPutMessage);[/align]
[align=left] }[/align]
[align=left] </script> [/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台服务端代码:[/align]
[align=left]using System.Threading;[/align]
[align=left]using System.Web.Services;[/align]
[align=left] [/align]
[align=left]public partial class _I_FailedCallback_Process_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] }[/align]
[align=left] [WebMethod][/align]
[align=left] public static int Division(int a,int b)[/align]
[align=left] {[/align]
[align=left] return a/b;[/align]
[align=left] }[/align]
[align=left] [WebMethod][/align]
[align=left] public static void Timeout()[/align]
[align=left] {[/align]
[align=left] Thread.Sleep(2000); //超时情况 [/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]10). Ajax library客户端编程特性[/align]
[align=left][/align]
[align=left]15. Asp.net Ajax框架中的客户端对象与服务端对象交互[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Asp.net Ajax框架中的客户端对象与服务端对象交互; Ajax框架还支持强类型集合,具体请看示例代码. -->[/align]
[align=left] <!-- 使用页面后台服务端方法则要把属性EnablePageMethods设置为True; --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods=true> [/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] <input type="button" value="客户端对象传递到服务端" onclick="Add1000Salary()" /> [/align]
[align=left] <input type="button" value="服务端对象传递到客户端" onclick="GetServerObject()" /> [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function Add1000Salary()[/align]
[align=left] { [/align]
[align=left] //如果Person不在App_Code中, 则使用方式如:var person = new 命名空间.Person(); [/align]
[align=left] var person = new Person(); //or var person = new Object(); [/align]
[align=left] [/align]
[align=left] person.Name = "Rose Zhao";[/align]
[align=left] person.Sex = "Female";[/align]
[align=left] person.Salary = 2000; [/align]
[align=left] PageMethods.Add_1000_Salary(person, Add_1000_SalarySucceeded);[/align]
[align=left] } [/align]
[align=left] function Add_1000_SalarySucceeded(result)[/align]
[align=left] {[/align]
[align=left] var message = String.format("姓名: {0}; 性别: {1}; 工资: {2}",result.Name, result.Sex, result.Salary); [/align]
[align=left] alert(message);[/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] function GetServerObject()[/align]
[align=left] {[/align]
[align=left] PageMethods.GetOnePerson(GetServerObjectSucceeded);[/align]
[align=left] } [/align]
[align=left] function GetServerObjectSucceeded(result)[/align]
[align=left] {[/align]
[align=left] for (var key in result)[/align]
[align=left] { [/align]
[align=left] var message = String.format([/align]
[align=left] "姓名: {0}; 性别: {1}; 工资: {2}",result[key].Name, result[key].Sex, result[key].Salary); [/align]
[align=left] alert(message);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台服务端代码:[/align]
[align=left]using System.Web.Services;[/align]
[align=left]using System.Collections.Generic;[/align]
[align=left]public partial class _J_Use_ClientObject_in_Ajax_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] { [/align]
[align=left] }[/align]
[align=left] [WebMethod][/align]
[align=left] public static Person Add_1000_Salary(Person person)[/align]
[align=left] {[/align]
[align=left] person.Salary += 1000;[/align]
[align=left] return person;[/align]
[align=left] }[/align]
[align=left] [WebMethod][/align]
[align=left] public static IDictionary<string, Person> GetOnePerson()[/align]
[align=left] {[/align]
[align=left] Dictionary<string, Person> result = new Dictionary<string, Person>();[/align]
[align=left] Person person = new Person();[/align]
[align=left] person.Name = "Rose Zhao";[/align]
[align=left] person.Sex = "Female";[/align]
[align=left] person.Salary = 2000;[/align]
[align=left] result[person.Name] = person;[/align]
[align=left] return result;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left][/align]
[align=left]16.DataSet/DataTable/DataRow正反序列化JSON格式程序集使用[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Microsoft.Web.Preview Serializer是ASP.NET AJAX January Futures CTP 中包括的一个程序集, 含有DatSet/DataTable/DataRow这些循环引用对象的序列化类, 使用时只要将[/align]
[align=left] Microsoft.Web.Preview.dll添加到bin目录下面, 再在Web.config中这样配置:[/align]
[align=left] <system.web.extensions>[/align]
[align=left] <scripting>[/align]
[align=left] <webServices> [/align]
[align=left] <jsonSerialization>[/align]
[align=left] <converters>[/align]
[align=left] <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview" />[/align]
[align=left] <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview" />[/align]
[align=left] <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview" /> [/align]
[align=left] </converters>[/align]
[align=left] </jsonSerialization> [/align]
[align=left] </webServices>[/align]
[align=left] <scripting> [/align]
[align=left] </system.web.extensions> [/align]
[align=left] -->[/align]
[align=left] <!-- 具体用法请看本示例 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods=true> [/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] <input type="button" value="获取数据" onclick="GetPersonDataTable();" /> [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function GetPersonDataTable()[/align]
[align=left] {[/align]
[align=left] PageMethods.GetPersonDataTable(CallBackProcessResultMethod,ErrorHandler);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function CallBackProcessResultMethod(result)[/align]
[align=left] { [/align]
[align=left] var sb = new Sys.StringBuilder("<table border='1' bgcolor='#6699ff'>");[/align]
[align=left] sb.append("<tr><td>姓名</td><td>性别</td><td>工资</td></tr>");[/align]
[align=left] for (var i = 0; i < result.rows.length; i++)[/align]
[align=left] {[/align]
[align=left] sb.append(String.format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>",result.rows[i]["Name"],result.rows[i].Sex, result.rows[i].Salary));[/align]
[align=left] }[/align]
[align=left] sb.append("</table>"); [/align]
[align=left] $get("table").innerHTML = sb.toString();[/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] function ErrorHandler(error)[/align]
[align=left] {[/align]
[align=left] alert(error.get_message());[/align]
[align=left] } [/align]
[align=left] </script> [/align]
[align=left] <br />[/align]
[align=left] <div id="table"></div>[/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]后台页面代码:[/align]
[align=left]using System.Web.Services;[/align]
[align=left]using System.Web.Script.Serialization;[/align]
[align=left]public partial class _J_Ajax_Client_Programe__B_JS_StringBuilder_Class_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] }[/align]
[align=left] [WebMethod] [/align]
[align=left] public static DataTable GetPersonDataTable()[/align]
[align=left] {[/align]
[align=left] //return "abc";[/align]
[align=left] DataTable dt = new DataTable();[/align]
[align=left] dt.Columns.Add(new DataColumn("Name", typeof(string)));[/align]
[align=left] dt.Columns.Add(new DataColumn("Sex", typeof(string)));[/align]
[align=left] dt.Columns.Add(new DataColumn("Salary", typeof(string)));[/align]
[align=left] [/align]
[align=left] DataRow drNew = dt.NewRow();[/align]
[align=left] drNew["Name"] = "Rose Zhao";[/align]
[align=left] drNew["Sex"] = "Female";[/align]
[align=left] drNew["Salary"] = "2000";[/align]
[align=left] dt.Rows.Add(drNew);[/align]
[align=left] [/align]
[align=left] drNew = dt.NewRow();[/align]
[align=left] drNew["Name"] = "King Zheng";[/align]
[align=left] drNew["Sex"] = "male";[/align]
[align=left] drNew["Salary"] = "3000";[/align]
[align=left] dt.Rows.Add(drNew); [/align]
[align=left] [/align]
[align=left] return dt;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]17. 客户端类使用Sys.StringBuilder使用示例[/align]
[align=left][/align]
[align=left]前台页面代码[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- .Sys.StringBuilder类在IE下可以提交客户端程序运行效率, 与服务端的System.Text.StringBuilder功能相同, 只不过分别用于客户端和服务端 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods=true> [/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] <input type="button" value="获取数据" onclick="GetPersonDataTable();" /> [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function GetPersonDataTable()[/align]
[align=left] {[/align]
[align=left] PageMethods.GetPersonDataTable(CallBackProcessResultMethod,ErrorHandler);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function CallBackProcessResultMethod(result)[/align]
[align=left] { [/align]
[align=left] var sb = new Sys.StringBuilder("<table border='1' bgcolor='#6699ff'>");[/align]
[align=left] sb.append("<tr><td>姓名</td><td>性别</td><td>工资</td></tr>");[/align]
[align=left] for (var i = 0; i < result.rows.length; i++)[/align]
[align=left] {[/align]
[align=left] sb.append(String.format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>",result.rows[i]["Name"],result.rows[i].Sex, result.rows[i].Salary));[/align]
[align=left] }[/align]
[align=left] sb.append("</table>"); [/align]
[align=left] $get("table").innerHTML = sb.toString();[/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] function ErrorHandler(error)[/align]
[align=left] {[/align]
[align=left] alert(error.get_message());[/align]
[align=left] } [/align]
[align=left] </script> [/align]
[align=left] <br />[/align]
[align=left] <div id="table"></div>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left]后台页面代码:[/align]
[align=left]using System.Web.Services;[/align]
[align=left]using System.Web.Script.Serialization;[/align]
[align=left] [/align]
[align=left]public partial class _J_Ajax_Client_Programe__B_JS_StringBuilder_Class_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod] [/align]
[align=left] public static DataTable GetPersonDataTable()[/align]
[align=left] {[/align]
[align=left] //return "abc";[/align]
[align=left] DataTable dt = new DataTable();[/align]
[align=left] dt.Columns.Add(new DataColumn("Name", typeof(string)));[/align]
[align=left] dt.Columns.Add(new DataColumn("Sex", typeof(string)));[/align]
[align=left] dt.Columns.Add(new DataColumn("Salary", typeof(string)));[/align]
[align=left] [/align]
[align=left] DataRow drNew = dt.NewRow();[/align]
[align=left] drNew["Name"] = "Rose Zhao";[/align]
[align=left] drNew["Sex"] = "Female";[/align]
[align=left] drNew["Salary"] = "2000";[/align]
[align=left] dt.Rows.Add(drNew);[/align]
[align=left] [/align]
[align=left] drNew = dt.NewRow();[/align]
[align=left] drNew["Name"] = "King Zheng";[/align]
[align=left] drNew["Sex"] = "male";[/align]
[align=left] drNew["Salary"] = "3000";[/align]
[align=left] dt.Rows.Add(drNew); [/align]
[align=left] [/align]
[align=left] return dt;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]18. WebRequestManager对象的客户端事件示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Ajax library中的客户端类Sys.Net.WebRequestManager事件丰富, 具体请看示例 --> [/align]
[align=left] <!-- 通过该类注册的事件只能在XmlHttp异步更新操作时, 才能够捕捉到. -->[/align]
[align=left] [/align]
[align=left] <script language="javascript">[/align]
[align=left] Sys.Net.WebRequestManager.add_invokingRequest(function(sender, eventArgs)[/align]
[align=left] {[/align]
[align=left] if (confirm("是否取消本操作?"))[/align]
[align=left] {[/align]
[align=left] eventArgs.set_cancel(true); [/align]
[align=left] }[/align]
[align=left] }); [/align]
[align=left] Sys.Net.WebRequestManager.add_completedRequest(function()[/align]
[align=left] {[/align]
[align=left] alert("刷新时间操作成功!");[/align]
[align=left] });[/align]
[align=left] </script>[/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" /> [/align]
[align=left] <asp:UpdatePanel ID="UpdatePanel1" runat="server">[/align]
[align=left] <ContentTemplate>[/align]
[align=left] <asp:Button ID="Button1" runat="server" Text="更新当前时间[无刷新]" />[/align]
[align=left] <br /><br />[/align]
[align=left] 当前时间: <%= DateTime.Now.ToString() %> [/align]
[align=left] </ContentTemplate>[/align]
[align=left] </asp:UpdatePanel> [/align]
[align=left] [/align]
[align=left] <asp:Button ID="Button2" runat="server" Text="更新当前时间[刷新]" />[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]11). 在Ajax操作中访问 Session-Cache-Application 对象[/align]
[align=left][/align]
[align=left]19. 在WebService方法中使用Session/Cache/Application对象[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在WebService方法中使用Session/Cache/Application对象 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager runat="server" ID="ScriptManager1"> [/align]
[align=left] <Services>[/align]
[align=left] <asp:ServiceReference Path="UseSession_etc.asmx" InlineScript="true" />[/align]
[align=left] </Services>[/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] [/align]
[align=left] <input type="button" value="改变服务端Session中存储的值" onclick="ChangeSession()" />[/align]
[align=left] <input type="button" value="改变服务端Cache中存储的值" onclick="ChangeCache()" />[/align]
[align=left] <input type="button" value="改变服务端Application中存储的值" onclick="ChangeApplication()" />[/align]
[align=left] [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function ChangeSession()[/align]
[align=left] {[/align]
[align=left] UseSession_etc.ChangeSession(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] function ChangeCache()[/align]
[align=left] {[/align]
[align=left] UseSession_etc.ChangeCache(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] function ChangeApplication()[/align]
[align=left] {[/align]
[align=left] UseSession_etc.ChangeApplication(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function ChangeSucceeded(result)[/align]
[align=left] {[/align]
[align=left] alert(result);[/align]
[align=left] }[/align]
[align=left] </script> [/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]WebService页面后台代码(*.asmx) :[/align]
[align=left]///<summary>[/align]
[align=left]/// UseSession_etc 的摘要说明[/align]
[align=left]///</summary>[/align]
[align=left][WebService(Namespace = "http://tempuri.org/")][/align]
[align=left][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][/align]
[align=left][ScriptService][/align]
[align=left]public class UseSession_etc : System.Web.Services.WebService {[/align]
[align=left] [/align]
[align=left] public UseSession_etc () {[/align]
[align=left] [/align]
[align=left] //如果使用设计的组件,请取消注释以下行 [/align]
[align=left] //InitializeComponent(); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod(EnableSession=true)][/align]
[align=left] public int ChangeSession()[/align]
[align=left] {[/align]
[align=left] if (Session["count"] == null)[/align]
[align=left] {[/align]
[align=left] Session["count"] = "0";[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] int intCount = int.Parse(Session["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] Session["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod][/align]
[align=left] public int ChangeCache()[/align]
[align=left] {[/align]
[align=left] if (this.Context.Cache["count"] == null)[/align]
[align=left] {[/align]
[align=left] this.Context.Cache["count"] = "0";[/align]
[align=left] }[/align]
[align=left] int intCount = int.Parse(this.Context.Cache["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] this.Context.Cache["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod][/align]
[align=left] public int ChangeApplication()[/align]
[align=left] {[/align]
[align=left] if (Application["count"] == null)[/align]
[align=left] {[/align]
[align=left] Application["count"] = "0"; [/align]
[align=left] } [/align]
[align=left] int intCount = int.Parse(Application["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] Application["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] } [/align]
[align=left]}[/align]
[align=left][/align]
[align=left]20. 在Page后台方法中使用Session/Cache/Application对象[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 在Page后台方法中使用Session/Cache/Application对象 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods=true> [/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] [/align]
[align=left] <input type="button" value="改变服务端Session中存储的值" onclick="ChangeSession()" />[/align]
[align=left] <input type="button" value="改变服务端Cache中存储的值" onclick="ChangeCache()" />[/align]
[align=left] <input type="button" value="改变服务端Application中存储的值" onclick="ChangeApplication()" />[/align]
[align=left] [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] function ChangeSession()[/align]
[align=left] {[/align]
[align=left] PageMethods.ChangeSession(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] function ChangeCache()[/align]
[align=left] {[/align]
[align=left] PageMethods.ChangeCache(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] function ChangeApplication()[/align]
[align=left] {[/align]
[align=left] PageMethods.ChangeApplication(ChangeSucceeded);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] function ChangeSucceeded(result)[/align]
[align=left] {[/align]
[align=left] alert(result);[/align]
[align=left] }[/align]
[align=left] </script> [/align]
[align=left] </div>[/align]
[align=left]</form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]页面后台代码[/align]
[align=left]using System.Web.Services;[/align]
[align=left]using System.Web.SessionState;[/align]
[align=left]using System.Web.Caching;[/align]
[align=left]public partial class _K_EnableSession_in_Ajax_Progam_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] //Session["count"] = "0";[/align]
[align=left] //Cache["count"] = "0";[/align]
[align=left] //Application["count"] = "0"; [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod(EnableSession = true)][/align]
[align=left] public static int ChangeSession()[/align]
[align=left] {[/align]
[align=left] if (System.Web.HttpContext.Current.Session["count"] == null)[/align]
[align=left] {[/align]
[align=left] System.Web.HttpContext.Current.Session["count"] = "0";[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] int intCount = int.Parse(System.Web.HttpContext.Current.Session["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] System.Web.HttpContext.Current.Session["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod][/align]
[align=left] public static int ChangeCache()[/align]
[align=left] {[/align]
[align=left] if (System.Web.HttpContext.Current.Cache["count"] == null)[/align]
[align=left] {[/align]
[align=left] System.Web.HttpContext.Current.Cache["count"] = "0";[/align]
[align=left] }[/align]
[align=left] int intCount = int.Parse(System.Web.HttpContext.Current.Cache["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] System.Web.HttpContext.Current.Cache["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [WebMethod][/align]
[align=left] public static int ChangeApplication()[/align]
[align=left] {[/align]
[align=left] if (System.Web.HttpContext.Current.Application["count"] == null)[/align]
[align=left] {[/align]
[align=left] System.Web.HttpContext.Current.Application["count"] = "0";[/align]
[align=left] }[/align]
[align=left] int intCount = int.Parse(System.Web.HttpContext.Current.Application["count"].ToString());[/align]
[align=left] intCount++;[/align]
[align=left] System.Web.HttpContext.Current.Application["count"] = intCount;[/align]
[align=left] return intCount;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]12). Ajax 客户端类库对现有 javascript对象的扩展功能[/align]
[align=left][/align]
[align=left]21. 扩展Array对象方法forEach使用示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Ajax Library中对Array的扩展方法forEach的使用. --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" /> [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] [/align]
[align=left] var str = "Hello Rose Zhao".split(" ");[/align]
[align=left] var obj = {returnValue : ""};[/align]
[align=left] Array.forEach(str, tidy, obj);//参数1: 要整理的字符串; 参数2: 委托的客户端方法名称; 参数3: 存放结果的对象. [/align]
[align=left] alert(obj.returnValue);[/align]
[align=left] [/align]
[align=left] function tidy(elt, index, array)[/align]
[align=left] {[/align]
[align=left] this.returnValue += "[" + elt + "] ";[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left]22. 对 JavaScript Function对象扩展, 注册事件新方式[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- 为Button1增加Click事件, 并调用自定义对象的自定义方法 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" /> [/align]
[align=left] <input type="button" value="调用事件" id="button1" /> [/align]
[align=left] <script language="javascript" type="text/javascript"> [/align]
[align=left] var clientObject = [/align]
[align=left] {[/align]
[align=left] text : "Hello ", [/align]
[align=left] OnClick : function(e, args)[/align]
[align=left] {[/align]
[align=left] alert(this.text + args + this.tail);[/align]
[align=left] },[/align]
[align=left] tail : "!"[/align]
[align=left] } [/align]
[align=left] var onClickDelegate = Function.createCallback(Function.createDelegate(clientObject, clientObject.OnClick), "Rose Zhao");[/align]
[align=left] $addHandler($get("button1"), "click", onClickDelegate);[/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left]23. Ajax对String对象扩展方法String.format的使用[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- String扩展方法format和localeFormat的使用 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" /> [/align]
[align=left] <script language="javascript" type="text/javascript">[/align]
[align=left] alert(String.format("Today is {0}.", new Date()));[/align]
[align=left] alert(String.localeFormat("今天是{0}", new Date()));[/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]13). 在Ajax library中的客户端面向对象(OO)功能[/align]
[align=left][/align]
[align=left]24. 客户端注册命名空间, 定义接口, 类继承示例[/align]
[align=left][/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Ajax library对客户端面向对象的支持 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug"> [/align]
[align=left] </asp:ScriptManager> [/align]
[align=left] [/align]
[align=left] <script language=javascript>[/align]
[align=left] [/align]
[align=left] //注册一个命名空间: "人类"[/align]
[align=left] Type.registerNamespace("Human");[/align]
[align=left] [/align]
[align=left] //定义一个接口: IPerson[/align]
[align=left] Human.IPerson = function()[/align]
[align=left] {[/align]
[align=left] throw Error.notImplemented();[/align]
[align=left] }[/align]
[align=left] Human.IPerson.prototype = [/align]
[align=left] {[/align]
[align=left] FullName : function()[/align]
[align=left] {[/align]
[align=left] throw Error.notImplemented();[/align]
[align=left] } [/align]
[align=left] }[/align]
[align=left] Human.IPerson.registerInterface("Human.IPerson");[/align]
[align=left] [/align]
[align=left] //定义一个类: Womenn , 并继承Human.IPerson[/align]
[align=left] Human.Womenn = function()[/align]
[align=left] {[/align]
[align=left] this._FirstName;[/align]
[align=left] this._LastName;[/align]
[align=left] }[/align]
[align=left] Human.Womenn.prototype = [/align]
[align=left] {[/align]
[align=left] get_FirstName : function()[/align]
[align=left] {[/align]
[align=left] return this._FirstName;[/align]
[align=left] },[/align]
[align=left] set_FirstName : function(value)[/align]
[align=left] {[/align]
[align=left] this._FirstName = value;[/align]
[align=left] },[/align]
[align=left] [/align]
[align=left] get_LastName : function()[/align]
[align=left] {[/align]
[align=left] return this._LastName;[/align]
[align=left] }, [/align]
[align=left] set_LastName : function(value)[/align]
[align=left] {[/align]
[align=left] this._LastName = value;[/align]
[align=left] },[/align]
[align=left] [/align]
[align=left] FullName : function()[/align]
[align=left] {[/align]
[align=left] return this._FirstName + " " + this._LastName;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] Human.Womenn.registerClass("Human.Womenn", null,Human.IPerson); [/align]
[align=left] [/align]
[align=left] //使用定义的类[/align]
[align=left] //debugger;[/align]
[align=left] var Rose = new Human.Womenn(); [/align]
[align=left] //注意这里不是这样写:Rose.set_LastName = "Jing";[/align]
[align=left] Rose.set_FirstName("Jing"); [/align]
[align=left] Rose.set_LastName("Zhao"); [/align]
[align=left] alert(Rose.FullName());[/align]
[align=left] [/align]
[align=left] </script>[/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]14). Asp.net Ajax 中的多语功能[/align]
[align=left][/align]
[align=left]25. Asp.net服务端使用全局和本地资源文件示例[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Asp.net全局和本地资源文件示例. --> [/align]
[align=left] <!-- UICulture: 设置本页面界面资源语种; Culture=设置本页面对象资源语种. 这里都设置为auto, 在实际运行时它会根据客户端浏览器设置的语言进行显示. --> [/align]
[align=left] <!-- 全局资源文件是指供所有页面使用. 本地资源文件是指供一个特定页面使用, 其App_LocalResources文件夹必须和页面在同一级目录下面--> [/align]
[align=left] <!-- 切换语言[中文<=>英文]看效果: 客户端设置浏览器的步骤: "工具"-"Internet选项"-"语言"; 如果没有 zh-cn或en-US, 将这两项加入, 加放后移到最上面的为默认启用.--> [/align]
[align=left] [/align]
[align=left] <div>[/align]
[align=left] <!-- 获取全局资源文件 -->[/align]
[align=left] <asp:Label ID="lbApple" runat="server"></asp:Label> [/align]
[align=left] <asp:Label ID="lbOrange" runat="server" Text="<%$ Resources:GlobalFruitsResource,Orange %>"></asp:Label>[/align]
[align=left] [/align]
[align=left] <!-- 获取本地资源文件 -->[/align]
[align=left] <asp:Label ID="lbBanana" runat="server" meta:resourcekey="lblBanana"></asp:Label> [/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left]后台页面代码:[/align]
[align=left]public partial class _N_Global_and_Local_Resources__A_Asp_net_Resource_Default : System.Web.UI.Page[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] //获取全局资源文件[/align]
[align=left] this.lbApple.Text = Resources.GlobalFruitsResource.Apple;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]26. Asp.net客户端使用全局和本地资源文件示例[/align]
[align=left][/align]
[align=left]前台页面代码:[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] [/align]
[align=left] <!-- 注释 -->[/align]
[align=left] <!-- Ajax对客户端资源文件的支持. --> [/align]
[align=left] <!-- Ajax中对客户端资源文件支持是通过定义多个*.js文件来实现的, 每个js文件实现一种语言所有的资源 --> [/align]
[align=left] <!-- UICulture: 设置本页面界面资源语种; Culture=设置本页面对象资源语种. 这里都设置为auto, 在实际运行时它会根据客户端浏览器设置的语言进行显示. --> [/align]
[align=left] <!-- 切换语言[中文<=>英文]看效果: 客户端设置浏览器的步骤: "工具"-"Internet选项"-"语言"; 如果没有 zh-cn或en-US, 将这两项加入, 加放后移到最上面的为默认启用.--> [/align]
[align=left] <!-- 与服务端资源文件相比, 这里还要指定一个很重要的属性ResourceUICultures, 指定支持的客户端语言种类集合, 用逗号分开 -->[/align]
[align=left] <!-- 客户端命名的各个语言的JS文件, 比如: FruitsResource.en-US.js中的en-US, 必须为浏览器中可选择类型中的一种, 不能自已定义! -->[/align]
[align=left] <!--JS文件中的: /// <reference name="MicrosoftAjax.js"/> 表示把此文件引用进来, 相当于C#语法中using指令, 只不过这里不是打开命名空间,而是引入文件 --> [/align]
[align=left] [/align]
[align=left] <asp:ScriptManager runat="server" ID="sm" EnableScriptLocalization="true">[/align]
[align=left] <Scripts>[/align]
[align=left] <asp:ScriptReference Path="~/(N)Global and Local Resources/(26)Ajax Resource/FruitsResource.js" ResourceUICultures="zn-ch,en-US" />[/align]
[align=left] </Scripts>[/align]
[align=left] </asp:ScriptManager>[/align]
[align=left] [/align]
[align=left] <script language="javascript">[/align]
[align=left] alert(Fruits.Fruit.Pear);[/align]
[align=left] </script>[/align]
[align=left] [/align]
[align=left] </div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left] [/align]
[align=left]中文资源文件FruitsResource.js代码:[/align]
[align=left]/// <reference name="MicrosoftAjax.js"/>[/align]
[align=left]Type.registerNamespace("Fruits");[/align]
[align=left] [/align]
[align=left]Fruits.Fruit = [/align]
[align=left]{[/align]
[align=left] "Pear" : "梨"[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]英文资源文件FruitsResource.en-US.js代码:[/align]
[align=left]/// <reference name="MicrosoftAjax.js"/>[/align]
[align=left]Type.registerNamespace("Fruits");[/align]
[align=left] [/align]
[align=left]Fruits.Fruit = [/align]
[align=left]{[/align]
[align=left] "Pear" : "Pear"[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left](三).教程下载[/align]
[align=left][/align]
[align=left] http://www.cnblogs.com/Files/MVP33650/Asp.net%20Ajax(by%20ChengKing).rar[/align]
[align=left][/align]
[align=left][/align]
[align=left](四).推荐站点[/align]
[align=left][/align]
[align=left][/align]
[align=left]1. http://www.asp.net/ajax/[/align]
[align=left][/align]
[align=left][/align]
[align=left]2. http://www.cnblogs.com/JeffreyZhao/[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: