日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

新瓶旧酒ASP.NET AJAX(6) - 客户端脚本编程

發(fā)布時間:2025/3/19 asp.net 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新瓶旧酒ASP.NET AJAX(6) - 客户端脚本编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
[索引頁]
[×××]


新瓶舊酒ASP.NET AJAX(6) - 客戶端腳本編程(Sys.WebForms命名空間下的類Sys.Serialization命名空間下的類)

作者:webabcd


介紹
Sys.WebForms命名空間下的類都是與局部刷新相關(guān)的類。PageRequestManager類,其中有5個事件:initializeRequest事件、beginRequest事件、endRequest事件、pageLoading事件和pageLoaded事件。與這5個事件相關(guān)的還有5個事件參數(shù)類:InitializeRequestEventArgs類、BeginRequestEventArgs類、EndRequestEventArgs類、PageLoadingEventArgs類和PageLoadedEventArgs類。Sys.Serialization命名空間下只有一個類:Sys.Serialization.JavaScriptSerializer類。它用于在ECMAScript(JavaScript)對象與JSON格式數(shù)據(jù)之間進行轉(zhuǎn)換。


1、PageRequestManager Class
??? ·initializeRequest Event?- 異步回發(fā)的初始化時觸發(fā)
??? ·beginRequest Event?- 異步回發(fā)開始前觸發(fā)
??? ·endRequest Event?-?異步回發(fā)完成后觸發(fā)
????·pageLoading Event?-?異步回發(fā)完成后頁面加載開始前觸發(fā)
??? ·pageLoaded Event?-?異步回發(fā)完成后頁面加載完成后觸發(fā)
????
·Sys.WebForms.PageRequestManager.getInstance(); - 返回頁面的PageRequestManager類的實例
??? ·Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); - 終止所有異步回發(fā)
??? ·isInAsyncPostBack屬性 - 是否正在異步回發(fā)過程中

2、InitializeRequestEventArgs Class
??? ·postBackElement屬性 - 產(chǎn)生回發(fā)事件的元素
??? ·InitializeRequestEventArgs繼承自Sys.CancelEventArgs,所以具有cancel屬性 - 是否取消回發(fā)

3、BeginRequestEventArgs Class
??? ·postBackElement屬性 - 產(chǎn)生回發(fā)事件的元素

4、EndRequestEventArgs Class
??? ·error屬性 - Error對象
??? ·errorHandled屬性 - 異常是否已經(jīng)被處理
??? ·response屬性 - Sys.Net.WebRequestExecutor對象
??? ·dataItems屬性 - 服務(wù)端注冊的DataItem

5、PageLoadingEventArgs Class
??? ·panelsUpdating屬性 - 準(zhǔn)備更新的UpdatePanel數(shù)組(div元素)
??? ·dataItems屬性 - 服務(wù)端注冊的DataItem

6、PageRequestManager Class
??? ·panelsUpdated屬性 - 更新完畢的UpdatePanel數(shù)組(div元素)
??? ·dataItems屬性 - 服務(wù)端注冊的DataItem

7、Sys.Serialization.JavaScriptSerializer Class
??? ·serialize方法 -?序列化(參數(shù):ECMAScript(JavaScript)對象;返回值:JSON字符串)
??? ·deserialize方法 - 反序列化(參數(shù):JSON字符串;返回值ECMAScript(JavaScript)對象:)

8、其它請查看官方文檔


示例
InitializeRequest.aspx <%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="InitializeRequest.aspx.cs"
????????Inherits="ClientScripting_SysWebForms_InitializeRequest" Title="InitializeRequest" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

????????<script runat="Server">
????????????????protected void Button1_Click(object sender, EventArgs e)
????????????????{
????????????????????????System.Threading.Thread.Sleep(3000);
????????????????}
????????</script>

????????<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" DynamicLayout="false">
????????????????<ProgressTemplate>
????????????????????????Loading
????????????????</ProgressTemplate>
????????</asp:UpdateProgress>
????????<asp:UpdatePanel ID="UpdatePanel1" runat="server">
????????????????<ContentTemplate>
????????????????????????<%= DateTime.Now %>
????????????????????????<br />
????????????????????????<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
??????????????????????????
????????????????????????<asp:Button ID="Button2" runat="server" Text="cancel屬性測試" OnClick="Button1_Click" />
????????????????</ContentTemplate>
????????</asp:UpdatePanel>
????????<p>
????????????????<textarea id="TraceConsole" style="width: 500px; height: 300px;"></textarea>
????????</p>

????????<script type="text/javascript" language="javascript">
????????
????????????????Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);
????????????????
????????????????function initializeRequestHandler(sender, e)
????????????????{
????????????????????????// postBackElement - 產(chǎn)生回發(fā)事件的元素
????????????????????????if (e.get_postBackElement().id == "<%= Button2.ClientID %>")
????????????????????????{
????????????????????????????????// InitializeRequestEventArgs繼承自Sys.CancelEventArgs????
????????????????????????????????// 取消回發(fā)
????????????????????????????????e.set_cancel(true);
????????????????????????}
????????????????????????else
????????????????????????{
????????????????????????????????// 獲得頁面的PageRequestManager類的實例
????????????????????????????????var prm = Sys.WebForms.PageRequestManager.getInstance();
????????????????????????
????????????????????????????????Sys.Debug.trace(e.get_postBackElement().id);
????????????????????????????????
????????????????????????????????// Sys.WebForms.PageRequestManager的isInAsyncPostBack屬性 - 是否正在異步回發(fā)過程中
????????????????????????????????Sys.Debug.trace(prm.get_isInAsyncPostBack());
????????????????????????}
????????????????}
????????</script>

</asp:Content> 運行結(jié)果
1、單擊“Button”按鈕
ctl00_ContentPlaceHolder1_Button1
false

2、在Loading的過程中再次單擊“Button”按鈕
ctl00_ContentPlaceHolder1_Button1
true

3、單擊“cancel屬性測試”按鈕
沒有反應(yīng)


BeginRequestAndEndRequest.aspx
注:在ScriptManager的OnAsyncPostBackError事件中輸入代碼:ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + "(母版頁的ScriptManager格式化錯誤信息)";
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="BeginRequestAndEndRequest.aspx.cs"
????????Inherits="ClientScripting_SysWebForms_BeginRequestAndEndRequest" Title="BeginRequest和EndRequest" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

????????<script runat="Server">
????????????????protected void Button1_Click(object sender, EventArgs e)
????????????????{
????????????????????????int i = Int32.Parse("abc");
????????????????}

????????????????protected void Button2_Click(object sender, EventArgs e)
????????????????{
????????????????????????ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, "webabcd");
????????????????}
????????</script>

????????<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server">
????????????????<ContentTemplate>
????????????????????????<%= DateTime.Now.ToString() %>
????????????????????????<br />
????????????????????????<asp:Button ID="Button1" runat="server" Text="觸發(fā)異常" OnClick="Button1_Click" />
??????????????????????????
????????????????????????<asp:Button ID="Button2" runat="server" Text="RegisterDataItem測試" OnClick="Button2_Click" />
????????????????</ContentTemplate>
????????</asp:UpdatePanel>

????????<p>
????????????????<textarea id="TraceConsole" style="width: 500px; height: 100px;"></textarea>
????????</p>

????????<script language="javascript" type="text/javascript">

????????????????Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandler);
????????????????Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
????????????????Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler2);

????????????????function beginRequestHandler(sender, e)
????????????????{
????????????????????????// postBackElement - 產(chǎn)生回發(fā)事件的元素
????????????????????????alert(e.get_postBackElement().id);????????????????????????
????????????????}
????????????????????????????????
????????????????function endRequestHandler(sender, e)
????????????????{
????????????????????????// response - Sys.Net.WebRequestExecutor對象
????????????????????????Sys.Debug.trace("狀態(tài)代碼:" + e.get_response().get_statusCode());
????????
????????????????????????if (e.get_error())
????????????????????????{
????????????????????????????????// errorHandled - 異常是否已經(jīng)被處理
????????????????????????????????e.set_errorHandled(true);
????????????????????????????????// error - Error對象
????????????????????????????????Sys.Debug.trace("出錯了!錯誤信息:" + e.get_error().message);
????????????????????????}
????????????????}
????????????????
????????????????function endRequestHandler2(sender, e)
????????????????{
????????????????????????var upId = "<%= this.UpdatePanel1.ClientID %>";
????????????????????????
????????????????????????// dataItems - 服務(wù)端注冊的DataItem
????????????????????????if (typeof(e.get_dataItems()[upId]) != 'undefined')
????????????????????????{
????????????????????????????????Sys.Debug.trace("注冊的數(shù)據(jù)項為:" + e.get_dataItems()[upId]);
????????????????????????}
????????????????}

????????</script>

</asp:Content> 運行結(jié)果
1、單擊“觸發(fā)異?!卑粹o
彈出框,信息:ct100_ContentPlaceHolder1_Button1
狀態(tài)代碼:200
出錯了!錯誤信息:輸入字符串的格式不正確。(母版頁的ScriptManager格式化錯誤信息)

2、單擊“RegisterDataItem測試”按鈕
彈出框,信息:ct100_ContentPlaceHolder1_Button2
狀態(tài)代碼:200
注冊的數(shù)據(jù)項為:webabcd


Sample.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Sample.aspx.cs"
????????Inherits="ClientScripting_SysSerialization_Sample" Title="Sys.Serialization Sample" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

????????<script runat="Server">
????????????????protected void Button1_Click(object sender, EventArgs e)
????????????????{
????????????????????????// 創(chuàng)建一個Person對象
????????????????????????Person person = new Person();
????????????????????????person.Name = "webabcd";
????????????????????????person.Age = 27;

????????????????????????// 序列化上面創(chuàng)建的Person對象,使其成為一個JSON字符串
????????????????????????System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
????????????????????????string s = jss.Serialize(person);
????????????????????????
????????????????????????// 注冊DataItem
????????????????????????ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, s);
????????????????}

????????????????/// <summary>
????????????????/// Person類
????????????????/// </summary>
????????????????public class Person
????????????????{
????????????????????????private string _name;
????????????????????????/// <summary>
????????????????????????/// 姓名
????????????????????????/// </summary>
????????????????????????public string Name
????????????????????????{
????????????????????????????????get { return _name; }
????????????????????????????????set { _name = value; }
????????????????????????}

????????????????????????private int _age;
????????????????????????/// <summary>
????????????????????????/// 年齡
????????????????????????/// </summary>
????????????????????????public int Age
????????????????????????{
????????????????????????????????get { return _age; }
????????????????????????????????set { _age = value; }
????????????????????????}

????????????????}
????????</script>

????????<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server">
????????????????<ContentTemplate>
????????????????????????<%= DateTime.Now.ToString()%>
????????????????????????<br />
????????????????????????<asp:Button ID="Button1" runat="server" Text="Sys.Serialization" OnClick="Button1_Click" />
????????????????</ContentTemplate>
????????</asp:UpdatePanel>
????????<p>
????????????????<textarea id="TraceConsole" style="width: 500px; height: 100px;"></textarea>
????????</p>

????????<script language="javascript" type="text/javascript">

????????????????Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
????????????????
????????????????function endRequestHandler(sender, e)
????????????????{
????????????????????????var upId = "<%= this.UpdatePanel1.ClientID %>";
????????????????????????
????????????????????????// 獲得服務(wù)端注冊的DataItem,它是一個JSON字符串
????????????????????????var jsonStringServer = e.get_dataItems()[upId];
????????????????????????
????????????????????????// 反序列化這個JSON字符串,使其成為一個JSON對象
????????????????????????var jsonObject = Sys.Serialization.JavaScriptSerializer.deserialize(jsonStringServer)

????????????????????????// 序列化這個JOSN對象,使其成為一個JSON字符串
????????????????????????var jsonStringClient = Sys.Serialization.JavaScriptSerializer.serialize(jsonObject);
????????????????????????
????????????????????????Sys.Debug.trace(jsonStringClient);
????????????????????????
????????????????????????Sys.Debug.trace(jsonObject.Name + " " + jsonObject.Age);
????????????????????????
????????????????????????Sys.Debug.trace(Sys.Serialization.JavaScriptSerializer.serialize(jsonObject));
????????????????}

????????</script>

</asp:Content> 運行結(jié)果
單擊“Sys.Serialization”按鈕
{"Name":"webabcd","Age":27}
webabcd 27
{"Name":"webabcd","Age":27}


OK
[×××]
?

轉(zhuǎn)載于:https://blog.51cto.com/webabcd/344801

總結(jié)

以上是生活随笔為你收集整理的新瓶旧酒ASP.NET AJAX(6) - 客户端脚本编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。