新瓶旧酒ASP.NET AJAX(1) - 简单地过一下每个控件(ScriptManager、ScriptManagerProxy-阿里云开发者社区

开发者社区> 技术小胖子> 正文

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

简介:
+关注继续查看
[索引页]
[源码下载]


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


作者:webabcd


介绍
ASP.NET AJAX就5个控件,分别是ScriptManager、ScriptManagerProxy、UpdatePanel、UpdateProgress和Timer。先简单地过一下。


关键
1、ScriptManager 和ScriptManagerProxy
    ·一个页只能有一个ScriptManager(包含了所有脚本资源),要放到任何用到AJAX的控件的前面。
    ·如果把它放到母版页,而内容页需要与其不同的配置的话,则应在内容页使用ScriptManagerProxy。 
    ·ScriptManager默认EnablePartialRendering="true"。
    ·ScriptManager的 AllowCustomErrorsRedirect="true"的时候,出现异常就会转到web.config里customErrors中defaultRedirect所指的地址。

2、 UpdatePanel
    ·UpdatePanel内放置需要被刷新的控件,如果是其内部控件事件导致其刷新,则不用另外做什么设置,因为UpdatePanel默认ChildrenAsTriggers="true"。
    ·如果是UpdatePanel外部控件导致其刷新的话,则应设置 Triggers。
    ·在Triggers内,如果AsyncPostBackTrigger未设置EventName,则为其指定控件的默认事件。 
    ·UpdatePanel默认UpdateMode="Always",需要的话应设置UpdateMode="Conditional"。
    ·RenderMode="Block"对应div;RenderMode="Inline"对应span

3、UpdateProgress
    ·默认,任何回发,当有延迟的时候则显示UpdateProgress里的ProgressTemplate。
    ·要与某UpdatePanel关联则设置 AssociatedUpdatePanelID属性。
    ·DynamicLayout为true则用“display:none;”隐藏;DynamicLayout为false则用 “visibility:hidden;”隐藏。
    ·默认情况下,例如有2个异步回发,如果第1个还没有执行完毕就执行第2个的话,则会先取消第1个异步回发。

4、Timer
    ·Interval:间隔时间,单位(毫秒);每一个间隔时间后将触发 Tick事件。
    ·Timer要放在其所刷新的UpdatePanel内部;放外面的话要设置UpdatePanel的Triggers。

5、其它
    ·要在UpdatePanel中使用Validator的话,请参看http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
    ·内容页获取母版页的ScriptManager:ScriptManager.GetCurrent(Page)
    ·后置代码处对UpdatePanel编程,例: ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.Button1); ScriptManager.GetCurrent (this).RegisterPostBackControl(this.Button2); this.UpdatePanel1.Update();
    ·Internet Explorer Developer Toolbar下载
    ·Fiddler下载
    ·Web Development Helper下载


示例
1、最简单的示例
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Sample.aspx.cs" 
        Inherits="Overview_Sample" Title="最简单的示例" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <ul> 
                <li>之前要有ScriptManager(包含了所有脚本资源),我把它放到母版页了。内容页如需不同配置则应使用ScriptManagerProxy。</li> 
                <li>最简单的示例,拖个UpdatePanel进来。在 UpdatePanel内拖个GridView,并设置其数据源即可。 </li> 
        </ul> 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
                <ContentTemplate> 
                        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
                                DataSourceID ="SqlDataSource1"> 
                                <Columns> 
                                     & nbsp;<asp:CommandField ShowEditButton="True" ShowSelectButton="True" /> 
                                </Columns> 
                        </asp:GridView> 
                </ContentTemplate> 
        </asp:UpdatePanel> 
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<% $ ConnectionStrings:connstr %>" 
                DeleteCommand="DELETE FROM [Products] WHERE [ProductID] = @ProductID" InsertCommand="INSERT INTO [Products]    ([ProductName], [QuantityPerUnit], [UnitPrice], [Discontinued]) VALUES    (@ProductName, @QuantityPerUnit, @UnitPrice, @Discontinued)" 
                SelectCommand="SELECT    [ProductID], [ProductName], [QuantityPerUnit], [UnitPrice], [Discontinued] FROM    [Products]" 
                UpdateCommand="UPDATE    [Products] SET [ProductName] = @ProductName, [QuantityPerUnit] = @QuantityPerUnit,    [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued WHERE [ProductID]    = @ProductID"> 
                <DeleteParameters> 
                        <asp:Parameter Name="ProductID" Type="Int32" /> 
                </DeleteParameters> 
                <UpdateParameters> 
                        <asp:Parameter Name="ProductName" Type="String" /> 
                        <asp:Parameter Name="QuantityPerUnit" Type="String" /> 
                        <asp:Parameter Name="UnitPrice" Type="Decimal" /> 
                        <asp:Parameter Name="Discontinued" Type="Boolean" /> 
                        <asp:Parameter Name="ProductID" Type="Int32" /> 
                </UpdateParameters> 
                <InsertParameters> 
                        <asp:Parameter Name="ProductName" Type="String" /> 
                        <asp:Parameter Name="QuantityPerUnit" Type="String" /> 
                        <asp:Parameter Name="UnitPrice" Type="Decimal" /> 
                        <asp:Parameter Name="Discontinued" Type="Boolean" /> 
                </InsertParameters> 
        </asp:SqlDataSource> 
</asp:Content>
 
2、UpdatePanel
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="UpdatePanel.aspx.cs" 
        Inherits="Overview_UpdatePanel" Title="UpdatePanel" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <ul> 
                <li>UpdatePanel内放置需要被刷新的控件,如果是其内部控件事件导致其刷新,则不用另外做什么设置,因为UpdatePanel默认ChildrenAsTriggers="true"。</li> 
                <li>如果是UpdatePanel外部控件导致其刷新的话,则应设置Triggers。</li> 
                <li>在Triggers内,如果AsyncPostBackTrigger 未设置EventName,则为其指定控件的默认事件。</li> 
                <li>UpdatePanel默认UpdateMode="Always",需要的话应设置UpdateMode="Conditional"。</li> 
                <li>RenderMode="Block"对应div; RenderMode="Inline"对应span</li> 
        </ul> 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
                <contenttemplate> 
                        <fieldset> 
                                <legend>我在UpdatePanel里</legend> 
                                <asp:Label ID="Label1" runat="server" Text="我是 Label"></asp:Label> 
                        </fieldset> 
                </contenttemplate> 
                <triggers> 
                        <%--如果没设置 EventName,则取默认事件,Button的默认事件为Click-- %> 
                        <asp:AsyncPostBackTrigger ControlID="Button1" /> 
                </triggers> 
        </asp:UpdatePanel> 
        <p> 
                 </p> 
        <fieldset> 
                <legend>我在UpdatePanel外</legend> 
                <asp:Button ID="Button1" runat="server" Text="按钮" OnClick="Button1_Click" /> 
        </fieldset> 
        <p> 
                 </p> 
        <%--嵌套UpdatePanel-- %> 
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
                <contenttemplate> 
                        <fieldset> 
                                <legend>外围UpdatePanel</legend> 
                                <asp:Label ID="Label2" runat="server" Text="我是 Label"></asp:Label> 
                                <asp:Button ID="Button2" runat="server" Text="按钮" OnClick="Button2_Click" /> 
                                <asp:UpdatePanel ID="UpdatePanel3" runat="server"> 
                                     & nbsp;<ContentTemplate> 
                                     & nbsp;        <fieldset> 
                                     & nbsp;                <legend>嵌套UpdatePanel</legend> 
                                     & nbsp;                <asp:Label ID="Label3" runat="server" Text="我是Label"></asp:Label> 
                                     & nbsp;                <asp:Button ID="Button3" runat="server" Text="按钮" OnClick="Button3_Click" /> 
                                     & nbsp;        </fieldset> 
                                     & nbsp;</ContentTemplate> 
                                </asp:UpdatePanel> 
                        </fieldset> 
                </contenttemplate> 
        </asp:UpdatePanel> 
</asp:Content>
 
3、UpdateProgress
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="UpdateProgress.aspx.cs" 
        Inherits="Overview_UpdateProgress" Title="UpdateProgress" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <ul> 
                <li>默认,任何回发,当有延迟的时候则显示 UpdateProgress里的ProgressTemplate。</li> 
                <li>要与某UpdatePanel关联则设置 AssociatedUpdatePanelID属性。</li> 
                <li>DynamicLayout为true则用“display:none; ”隐藏;DynamicLayout为false则用“visibility:hidden;”隐藏。</li> 
                <li>默认情况下,例如有2个异步回发,如果第1 个还没有执行完毕就执行第2个的话,则会先取消第1个异步回发。</li> 
        </ul> 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
                <ContentTemplate> 
                        <fieldset> 
                                <legend>UpdatePanel1</legend> 
                                <asp:Label ID="Label1" runat="server" Text="Label1"></asp:Label> 
                                <br /> 
                                <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
                        </fieldset> 
                </ContentTemplate> 
        </asp:UpdatePanel> 
        <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1" 
                DynamicLayout="false"> 
                <ProgressTemplate> 
                        <p> 
                                UpdatePanel1更新中    
                        </p> 
                </ProgressTemplate> 
        </asp:UpdateProgress> 
        <p> 
                 </p> 
        <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
                <ContentTemplate> 
                        <fieldset> 
                                <legend>UpdatePanel2</legend> 
                                <asp:Label ID="Label2" runat="server" Text="Label2"></asp:Label> 
                                <br /> 
                                <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /> 
                        </fieldset> 
                </ContentTemplate> 
        </asp:UpdatePanel> 
        <asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel2" 
                DynamicLayout="true"> 
                <ProgressTemplate> 
                        <p> 
                                UpdatePanel2更新中    
                        </p> 
                </ProgressTemplate> 
        </asp:UpdateProgress> 
        <p> 
                 </p> 
        <asp:UpdatePanel ID="UpdatePanel3" runat="server"> 
                <ContentTemplate> 
                        <fieldset> 
                                <legend>UpdatePanel3</legend> 
                                <asp:Label ID="Label3" runat="server" Text="Label3"></asp:Label><br /> 
                                <asp:Button ID="Button3" runat="server" Text="Button" OnClick="Button3_Click" /> 
                        </fieldset> 
                </ContentTemplate> 
        </asp:UpdatePanel> 
        <asp:UpdateProgress ID="UpdateProgress3" runat="server"> 
                <ProgressTemplate> 
                        有延迟我就更新 
                </ProgressTemplate> 
        </asp:UpdateProgress> 
</asp:Content>
 
 
4、Timer
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Timer.aspx.cs" 
        Inherits="Overview_Timer" Title="Timer" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <ul> 
                <li>Interval:间隔时间,单位(毫秒);每一个间隔时间后将触发Tick事件 </li> 
                <li>Timer要放在其所刷新的UpdatePanel内部;放外面的话要设置UpdatePanel的Triggers。</li> 
        </ul> 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
                <ContentTemplate> 
                        <fieldset> 
                                <legend>UpdatePanel1</legend> 
                                <p> 
                                     & nbsp;内部Timer 
                                     & nbsp;<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="1000"> 
                                     & nbsp;</asp:Timer> 
                                </p> 
                                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
                        </fieldset> 
                </ContentTemplate> 
        </asp:UpdatePanel> 
</asp:Content>
 
 
注:以上示例涉及到后置代码的,其作用都是用来刷新相关的Label的,所以略掉了。


OK
[源码下载]


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344667,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10092 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26795 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2962 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2511 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9161 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13893 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11819 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4660 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4510 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载