新瓶旧酒ASP.NET AJAX(6) – 客户端脚本编程(Sys.WebForms命名空间下的类Sys.Serialization命名空间下的类)

[索引页]
[源码下载]

新瓶旧酒ASP.NET AJAX(6) –
客户端脚本编程(Sys.WebForms命名空间下的类Sys.Serialization命名空间下的类)

作者:webabcd

介绍
Sys.WebForms命名空间下的类都是与部分刷新相关的类。PageRequestManager类,其中有5个事件:initializeRequest事件、beginRequest事件、endRequest事件、pageLoading事件和pageLoaded事件。与这5个事件有关的还有5个事件参数类:InitializeRequest伊夫(Eve)ntArgs类、BeginRequest伊芙(Eve)ntArgs类、EndRequest伊夫ntArgs类、PageLoading伊夫(Eve)ntArgs类和PageLoaded伊夫(Eve)ntArgs类。Sys.Serialization命名空间下惟有一个类:Sys.Serialization.JavaScriptSerializer类。它用来在ECMAScript(JavaScript)对象与JSON格式数据里面举办更换。

1、PageRequestManager Class
    ·initializeRequest 伊夫(Eve)nt – 异步回发的初步化时接触
    ·beginRequest 伊夫(Eve)nt – 异步回发起首前触发
    ·endRequest 伊夫nt – 异步回发完成后触发
    ·pageLoading 伊芙nt – 异步回发完成后页面加载起初前触发
    ·pageLoaded 伊夫nt – 异步回发完成后页面加载成功后触发
    ·Sys.WebForms.PageRequestManager.getInstance(); –
重临页面的PageRequestManager类的实例
    ·Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); –
终止所有异步回发
    ·isInAsyncPostBack属性 – 是否正在异步回发过程中

2、InitializeRequestEventArgs Class
    ·postBackElement属性 – 爆发回发事件的元素
   
·InitializeRequest伊夫ntArgs继承自Sys.Cancel伊芙(Eve)ntArgs,所以具有cancel属性

  • 是否吊销回发

3、BeginRequestEventArgs Class
    ·postBackElement属性 – 发生回发事件的要素

4、EndRequestEventArgs Class
    ·error属性 – Error对象
    ·errorHandled属性 – 至极是否业已被处理
    ·response属性 – Sys.Net.WebRequestExecutor对象
    ·dataItems属性 – 服务端注册的DataItem

5、PageLoadingEventArgs Class
    ·panelsUpdating属性 – 准备更新的UpdatePanel数组(div元素)
    ·dataItems属性 – 服务端注册的DataItem

6、PageRequestManager Class
    ·panelsUpdated属性 – 更新完毕的UpdatePanel数组(div元素)
    ·dataItems属性 – 服务端注册的DataItem

7、Sys.Serialization.JavaScriptSerializer Class
    ·serialize方法
– 序列化(参数:ECMAScript(JavaScript)对象;返回值:JSON字符串)
    ·deserialize方法 –
反序列化(参数:JSON字符串;重回值ECMAScript(JavaScript)对象:)

8、另外请查看官方文档

示例
InitializeRequest.aspx

图片 1图片 2<%图片 3@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”InitializeRequest.aspx.cs”
图片 4    Inherits=”ClientScripting_SysWebForms_InitializeRequest” Title=”InitializeRequest” %>
图片 5
图片 6<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
图片 7
图片 8图片 9    <script runat=”Server”>图片 10
图片 11        protected void Button1_Click(object sender, EventArgs e)
图片 12图片 13        图片 14{
图片 15            System.Threading.Thread.Sleep(3000);
图片 16        }
图片 17    </script>
图片 18
图片 19    <asp:UpdateProgress ID=”UpdateProgress1″ runat=”server” DisplayAfter=”0″ DynamicLayout=”false”>
图片 20        <ProgressTemplate>
图片 21            Loading图片 22
图片 23        </ProgressTemplate>
图片 24    </asp:UpdateProgress>
图片 25    <asp:UpdatePanel ID=”UpdatePanel1″ runat=”server”>
图片 26        <ContentTemplate>
图片 27            <%= DateTime.Now %>
图片 28            <br />
图片 29            <asp:Button ID=”Button1″ runat=”server” Text=”Button” OnClick=”Button1_Click” />
图片 30              
图片 31            <asp:Button ID=”Button2″ runat=”server” Text=”cancel属性测试” OnClick=”Button1_Click” />
图片 32        </ContentTemplate>
图片 33    </asp:UpdatePanel>
图片 34    <p>
图片 35        <textarea id=”TraceConsole” style=”width: 500px; height: 300px;”></textarea>
图片 36    </p>
图片 37
图片 38图片 39    <script type=”text/javascript” language=”javascript”>图片 40
图片 41    
图片 42        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);
图片 43        
图片 44        function initializeRequestHandler(sender, e)
图片 45图片 46        图片 47{
图片 48            // postBackElement – 爆发回发事件的要素
图片 49            if (e.get_postBackElement().id == “<%= Button2.ClientID %>”)
图片 50图片 51            图片 52{
图片 53                // InitializeRequestEventArgs继承自Sys.CancelEventArgs 
图片 54                // 撤废回发
图片 55                e.set_cancel(true);
图片 56            }
图片 57            else
图片 58图片 59            图片 60{
图片 61                // 得到页面的PageRequestManager类的实例
图片 62                var prm = Sys.WebForms.PageRequestManager.getInstance();
图片 63            
图片 64                Sys.Debug.trace(e.get_postBackElement().id);
图片 65                
图片 66                // Sys.WebForms.PageRequestManager的isInAsyncPostBack属性 – 是否正在异步回发过程中
图片 67                Sys.Debug.trace(prm.get_isInAsyncPostBack());
图片 68            }
图片 69        }
图片 70    </script>
图片 71
图片 72</asp:Content>
图片 73

运作结果
1、单击“Button”按钮
ctl00_ContentPlaceHolder1_Button1
false

2、在Loading的进程中再一次单击“Button”按钮
ctl00_ContentPlaceHolder1_Button1
true

3、单击“cancel属性测试”按钮
未曾反应

BeginRequestAndEndRequest.aspx
注:在ScriptManager的OnAsyncPostBackError事件中输入代码:ScriptManager1.AsyncPostBackErrorMessage
= e.Exception.Message + “(母版页的ScriptManager格式化错误音讯)”;

图片 74图片 75<%图片 76@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”BeginRequestAndEndRequest.aspx.cs”
图片 77    Inherits=”ClientScripting_SysWebForms_BeginRequestAndEndRequest” Title=”BeginRequest和EndRequest” %>
图片 78
图片 79<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
图片 80
图片 81图片 82    <script runat=”Server”>图片 83
图片 84        protected void Button1_Click(object sender, EventArgs e)
图片 85图片 86        图片 87{
图片 88            int i = Int32.Parse(“abc”);
图片 89        }
图片 90
图片 91        protected void Button2_Click(object sender, EventArgs e)
图片 92图片 93        图片 94{
图片 95            ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, “webabcd”);
图片 96        }
图片 97    </script>
图片 98
图片 99    <asp:UpdatePanel ID=”UpdatePanel1″ UpdateMode=”Conditional” runat=”Server”>
图片 100        <ContentTemplate>
图片 101            <%= DateTime.Now.ToString() %>
图片 102            <br />
图片 103            <asp:Button ID=”Button1″ runat=”server” Text=”触发这么些” OnClick=”Button1_Click” />
图片 104              
图片 105            <asp:Button ID=”Button2″ runat=”server” Text=”RegisterDataItem测试” OnClick=”Button2_Click” />
图片 106        </ContentTemplate>
图片 107    </asp:UpdatePanel>
图片 108
图片 109    <p>
图片 110        <textarea id=”TraceConsole” style=”width: 500px; height: 100px;”></textarea>
图片 111    </p>
图片 112
图片 113图片 114    <script language=”javascript” type=”text/javascript”>图片 115
图片 116
图片 117        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandler);
图片 118        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
图片 119        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler2);
图片 120
图片 121        function beginRequestHandler(sender, e)
图片 122图片 123        图片 124{
图片 125            // postBackElement – 爆发回发事件的元素
图片 126            alert(e.get_postBackElement().id);            
图片 127        }
图片 128                
图片 129        function endRequestHandler(sender, e)
图片 130图片 131        图片 132{
图片 133            // response – Sys.Net.WebRequestExecutor对象
图片 134            Sys.Debug.trace(“状态代码:” + e.get_response().get_statusCode());
图片 135    
图片 136            if (e.get_error())
图片 137图片 138            图片 139{
图片 140                // errorHandled – 很是是否已经被处理
图片 141                e.set_errorHandled(true);
图片 142                // error – Error对象
图片 143                Sys.Debug.trace(“出错了!错误新闻:” + e.get_error().message);
图片 144            }
图片 145        }
图片 146        
图片 147        function endRequestHandler2(sender, e)
图片 148图片 149        图片 150{
图片 151            var upId = “<%= this.UpdatePanel1.ClientID %>”;
图片 152            
图片 153            // dataItems – 服务端注册的DataItem
图片 154            if (typeof(e.get_dataItems()[upId]) != ‘undefined’)
图片 155图片 156            图片 157{
图片 158                Sys.Debug.trace(“注册的数码项为:” + e.get_dataItems()[upId]);
图片 159            }
图片 160        }
图片 161
图片 162    </script>
图片 163
图片 164</asp:Content>
图片 165

运转结果
1、单击“触发特别”按钮
弹出框,信息:ct100_ContentPlaceHolder1_Button1
气象代码:200
出错了!错误消息:输入字符串的格式不科学。(母版页的ScriptManager格式化错误信息)

2、单击“RegisterDataItem测试”按钮
弹出框,信息:ct100_ContentPlaceHolder1_Button2
情形代码:200
登记的数据项为:webabcd

Sample.aspx

图片 166图片 167<%图片 168@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”Sample.aspx.cs”
图片 169    Inherits=”ClientScripting_SysSerialization_Sample” Title=”Sys.Serialization Sample” %>
图片 170
图片 171<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
图片 172
图片 173图片 174    <script runat=”Server”>图片 175
图片 176        protected void Button1_Click(object sender, EventArgs e)
图片 177图片 178        图片 179{
图片 180            // 创制一个Person对象
图片 181            Person person = new Person();
图片 182            person.Name = “webabcd”;
图片 183            person.Age = 27;
图片 184
图片 185            // 系列化下面成立的Person对象,使其改为一个JSON字符串
图片 186            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
图片 187            string s = jss.Serialize(person);
图片 188            
图片 189            // 注册DataItem
图片 190            ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, s);
图片 191        }
图片 192
图片 193        /// <summary>
图片 194        /// Person类
图片 195        /// </summary>
图片 196        public class Person
图片 197图片 198        图片 199{
图片 200            private string _name;
图片 201            /// <summary>
图片 202            /// 姓名
图片 203            /// </summary>
图片 204            public string Name
图片 205图片 206            图片 207{
图片 208图片 209                get 图片 210{ return _name; }
图片 211图片 212                set 图片 213{ _name = value; }
图片 214            }
图片 215
图片 216            private int _age;
图片 217            /// <summary>
图片 218            /// 年龄
图片 219            /// </summary>
图片 220            public int Age
图片 221图片 222            图片 223{
图片 224图片 225                get 图片 226{ return _age; }
图片 227图片 228                set 图片 229{ _age = value; }
图片 230            }
图片 231
图片 232        }
图片 233    </script>
图片 234
图片 235    <asp:UpdatePanel ID=”UpdatePanel1″ UpdateMode=”Conditional” runat=”Server”>
图片 236        <ContentTemplate>
图片 237            <%= DateTime.Now.ToString()%>
图片 238            <br />
图片 239            <asp:Button ID=”Button1″ runat=”server” Text=”Sys.Serialization” OnClick=”Button1_Click” />
图片 240        </ContentTemplate>
图片 241    </asp:UpdatePanel>
图片 242    <p>
图片 243        <textarea id=”TraceConsole” style=”width: 500px; height: 100px;”></textarea>
图片 244    </p>
图片 245
图片 246图片 247    <script language=”javascript” type=”text/javascript”>图片 248
图片 249
图片 250        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
图片 251        
图片 252        function endRequestHandler(sender, e)
图片 253图片 254        图片 255{
图片 256            var upId = “<%= this.UpdatePanel1.ClientID %>”;
图片 257            
图片 258            // 得到服务端注册的DataItem,它是一个JSON字符串
图片 259            var jsonStringServer = e.get_dataItems()[upId];
图片 260            
图片 261            // 反序列化这一个JSON字符串,使其成为一个JSON对象
图片 262            var jsonObject = Sys.Serialization.JavaScriptSerializer.deserialize(jsonStringServer)
图片 263
图片 264            // 体系化这么些JOSN对象,使其改为一个JSON字符串
图片 265            var jsonStringClient = Sys.Serialization.JavaScriptSerializer.serialize(jsonObject);
图片 266            
图片 267            Sys.Debug.trace(jsonStringClient);
图片 268            
图片 269            Sys.Debug.trace(jsonObject.Name + ” ” + jsonObject.Age);
图片 270            
图片 271            Sys.Debug.trace(Sys.Serialization.JavaScriptSerializer.serialize(jsonObject));
图片 272        }
图片 273
图片 274    </script>
图片 275
图片 276</asp:Content>
图片 277

运作结果
单击“Sys.Serialization”按钮
{“Name”:”webabcd”,”Age”:27}
webabcd 27
{“Name”:”webabcd”,”Age”:27}

OK
[源码下载]