<a href="http://webabcd.blog.51cto.com/1787395/344663" target="_blank">[索引頁]</a>
<a href="http://down.51cto.com/data/100916" target="_blank">[源碼下載下傳]</a>
新瓶舊酒ASP.NET AJAX(6) - 用戶端腳本程式設計(Sys.WebForms命名空間下的類Sys.Serialization命名空間下的類)
介紹
Sys.WebForms命名空間下的類都是與局部重新整理相關的類。PageRequestManager類,其中有5個事件:initializeRequest事件、beginRequest事件、endRequest事件、pageLoading事件和pageLoaded事件。與這5個事件相關的還有5個事件參數類:InitializeRequestEventArgs類、BeginRequestEventArgs類、EndRequestEventArgs類、PageLoadingEventArgs類和PageLoadedEventArgs類。Sys.Serialization命名空間下隻有一個類:Sys.Serialization.JavaScriptSerializer類。它用于在ECMAScript(JavaScript)對象與JSON格式資料之間進行轉換。
1、PageRequestManager Class
·initializeRequest Event - 異步回發的初始化時觸發
·beginRequest Event - 異步回發開始前觸發
·endRequest Event - 異步回發完成後觸發
·pageLoading Event - 異步回發完成後頁面加載開始前觸發
·pageLoaded Event - 異步回發完成後頁面加載完成後觸發
·Sys.WebForms.PageRequestManager.getInstance(); - 傳回頁面的PageRequestManager類的執行個體
·Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); - 終止所有異步回發
·isInAsyncPostBack屬性 - 是否正在異步回發過程中
2、InitializeRequestEventArgs Class
·postBackElement屬性 - 産生回發事件的元素
·InitializeRequestEventArgs繼承自Sys.CancelEventArgs,是以具有cancel屬性 - 是否取消回發
3、BeginRequestEventArgs Class
4、EndRequestEventArgs Class
·error屬性 - Error對象
·errorHandled屬性 - 異常是否已經被處理
·response屬性 - Sys.Net.WebRequestExecutor對象
·dataItems屬性 - 服務端注冊的DataItem
5、PageLoadingEventArgs Class
·panelsUpdating屬性 - 準備更新的UpdatePanel數組(div元素)
6、PageRequestManager Class
·panelsUpdated屬性 - 更新完畢的UpdatePanel數組(div元素)
7、Sys.Serialization.JavaScriptSerializer Class
·serialize方法 - 序列化(參數:ECMAScript(JavaScript)對象;傳回值:JSON字元串)
·deserialize方法 - 反序列化(參數:JSON字元串;傳回值ECMAScript(JavaScript)對象:)
示例
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 - 産生回發事件的元素
if (e.get_postBackElement().id == "<%= Button2.ClientID %>")
{
// InitializeRequestEventArgs繼承自Sys.CancelEventArgs
// 取消回發
e.set_cancel(true);
}
else
// 獲得頁面的PageRequestManager類的執行個體
var prm = Sys.WebForms.PageRequestManager.getInstance();
Sys.Debug.trace(e.get_postBackElement().id);
// Sys.WebForms.PageRequestManager的isInAsyncPostBack屬性 - 是否正在異步回發過程中
Sys.Debug.trace(prm.get_isInAsyncPostBack());
</asp:Content>
運作結果
1、單擊“Button”按鈕
ctl00_ContentPlaceHolder1_Button1
false
2、在Loading的過程中再次單擊“Button”按鈕
true
3、單擊“cancel屬性測試”按鈕
沒有反應
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" %>
int i = Int32.Parse("abc");
protected void Button2_Click(object sender, EventArgs e)
ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, "webabcd");
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server">
<%= DateTime.Now.ToString() %>
<asp:Button ID="Button1" runat="server" Text="觸發異常" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="RegisterDataItem測試" OnClick="Button2_Click" />
<textarea id="TraceConsole" style="width: 500px; height: 100px;"></textarea>
<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)
alert(e.get_postBackElement().id);
function endRequestHandler(sender, e)
// response - Sys.Net.WebRequestExecutor對象
Sys.Debug.trace("狀态代碼:" + e.get_response().get_statusCode());
if (e.get_error())
// errorHandled - 異常是否已經被處理
e.set_errorHandled(true);
// error - Error對象
Sys.Debug.trace("出錯了!錯誤資訊:" + e.get_error().message);
function endRequestHandler2(sender, e)
var upId = "<%= this.UpdatePanel1.ClientID %>";
// dataItems - 服務端注冊的DataItem
if (typeof(e.get_dataItems()[upId]) != 'undefined')
Sys.Debug.trace("注冊的資料項為:" + e.get_dataItems()[upId]);
1、單擊“觸發異常”按鈕
彈出框,資訊:ct100_ContentPlaceHolder1_Button1
狀态代碼:200
出錯了!錯誤資訊:輸入字元串的格式不正确。(母版頁的ScriptManager格式化錯誤資訊)
2、單擊“RegisterDataItem測試”按鈕
彈出框,資訊:ct100_ContentPlaceHolder1_Button2
注冊的資料項為:webabcd
Sample.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Sample.aspx.cs"
Inherits="ClientScripting_SysSerialization_Sample" Title="Sys.Serialization Sample" %>
// 建立一個Person對象
Person person = new Person();
person.Name = "webabcd";
person.Age = 27;
// 序列化上面建立的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;
/// 年齡
public int Age
get { return _age; }
set { _age = value; }
<%= DateTime.Now.ToString()%>
<asp:Button ID="Button1" runat="server" Text="Sys.Serialization" OnClick="Button1_Click" />
// 獲得服務端注冊的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));
單擊“Sys.Serialization”按鈕
{"Name":"webabcd","Age":27}
webabcd 27
OK
本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/344801,如需轉載請自行聯系原作者