[索引页]
[×××]

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

作者:webabcd

介绍
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
    ·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

<%@ 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());
                        }
                }
        </script>

</asp:Content>

运行结果
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格式化错误信息)";

<%@ 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="触发异常" 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 - 产生回发事件的元素
                        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]);
                        }
                }

</script>

</asp:Content>

运行结果
1、单击“触发异常”按钮
弹出框,信息:ct100_ContentPlaceHolder1_Button1
状态代码:200
出错了!错误信息:输入字符串的格式不正确。(母版页的ScriptManager格式化错误信息)

2、单击“RegisterDataItem测试”按钮
弹出框,信息:ct100_ContentPlaceHolder1_Button2
状态代码:200
注册的数据项为: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)
                {
                        // 创建一个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;
                        /// <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 %>";
                        
                        // 获得服务端注册的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>

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

OK
[×××]

 

转载于:https://blog.51cto.com/webabcd/344801

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

  1. 新瓶旧酒ASP.NET AJAX(1) - 简单地过一下每个控件(ScriptManager、ScriptManagerProxy

    [索引页] [×××] 新瓶旧酒ASP.NET AJAX(1) - 简单地过一下每个控件(ScriptManager.ScriptManagerProxy.UpdatePanel. UpdatePro ...

  2. Service Mesh 是新瓶装旧酒吗?

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 李云(花名: ...

  3. 6点叫醒全员的腾讯是枕戈待旦,还是如李彦宏说的“新瓶装旧酒”

    2010中国(深圳)IT领袖峰会的主题是"后危机时代:IT引领中国经济发展新模式",当年BAT三巨头聚首论"云计算"实录: 李彦宏说:"......所 ...

  4. CMMI 2.0新瓶装旧酒,贩卖假酒更难了

    看到这个标题,CMMI 2.0新瓶装旧酒?可能有很多人不同意,尤其是那些依靠CMMI吃饭的人.但其实没必要畏惧,实事求是,客观认真的对待比什么都强.如同"茅台",即便换了n多次新包 ...

  5. 阿里CTO谈BAT:李彦宏说是新瓶装旧酒、马化腾说太遥远了、马云说今天就应该做

    在深圳IT领袖峰会上,马化腾大谈云计算的用处. 主持人有意问阿里CTO王坚: 其实马云是不懂技术的,他是学外语的.完全不懂技术,但是看一些东西还蛮有意思的. 王坚你作为阿里战略委员会主席.一个阿里的技 ...

  6. 边缘计算:新瓶装旧酒?

    导读:边缘计算概念刚出来的时候,很多人的第一反应是"这是哪个行业组织或者公司为了拉动市场需求而创造出来的新词汇吧?" 边缘计算究竟是什么?为什么会有边缘计算?它是一个全新的概念吗? ...

  7. 数字化转型是新瓶装旧酒吗?

    编 辑:彭文华 来 源:大数据架构师(ID:bigdata_arch) 彭友萌好,我是你的老彭友.周四受51CTO邀请,给大家做了一个数字化转型的线上分享.为了准备这个PPT,我连续两天熬到1点多 我 ...

  8. Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第5回(错不了专辑)

    色即设--设计,从网页设计师的角度出发.因为自己的的特殊性(本身是软件工程师,但是对网页设计却有浓厚的兴趣),所以我的此系列文章不仅仅从编程角度出发,还将从设计的角度出发来细数AjaxControlT ...

  9. Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第3回(UE专辑)

    前言: 色即设--设计,从网页设计的角度出发.因为自己的的特殊性(本身是软件工程师,但是对网页设计却有浓厚的兴趣),所以此系列文章不仅仅从编程角度出发,还将从设计的角度出发来细数AjaxControl ...

最新文章

  1. Nginx开启gzip压缩解决react打包文件过大
  2. hosts文件与resolv.conf文件
  3. CF-567F(President and Roads) DAG必经边
  4. SAP C4C,CRM和S4HANA的Saved Query使用介绍
  5. 由mysql8降级到mysql5
  6. oracle--第一天PLSQL--bai
  7. Silverlight 出现“无法加载 URI 的内容。URI 可能无效”错误的解决方案
  8. jQuery框架学习第四天:使用jQuery操作元素的属性与样式
  9. linux 常用分区有哪些,Linux常用分区及目录
  10. python 读取文件到字典读取顺序_Python用list或dict字段模式读取文件的方法
  11. (转)任正非圣诞文章:千古兴亡多少事,一江春水向东流,为轮值CEO鸣锣开道...
  12. java汉字拼音首字母的获取解决方案
  13. git 和 github 是什么意思?
  14. 里费默之死的哲学解释
  15. macOS Sierra,Xcode 8配置openCV3
  16. 移动端触摸(touch)事件
  17. easyrecovery2023电脑文件数据恢复软件功能介绍
  18. Rust 引入其他的 rs 文件
  19. python3 模拟 ajax post请求
  20. Unity导入资源解决报错

热门文章

  1. Qt5.9绘制文字(drawText函数)用法
  2. 信息系统项目管理师优秀论文:论信息系统范围管理
  3. 【贵州】2021年下半年软考报考时间及通知
  4. 2021年5月软考准考证打印时间
  5. 【广东省】2020年下软考证书领取通知
  6. 项目管理各管理内部重点
  7. 项目经理如何理解定位技术
  8. 从个人到团队:思维转变是关键
  9. C#中WinForm程序退出方法
  10. 信息系统项目管理师-论文专题(三)范围管理论文写作