• UpdatePanel的使用(上)


    UpdatePanel的简单属性
    Demo1.1-RenderMode:
    <asp:UpdatePanel ... RenderMode="Block">UpdatePanel内容单独成块
    <asp:UpdatePanel ... RenderMode="Inline">UpdatePanel内容与其它页面元素在同一行

    Demo1.2-UpdateMode:
    <asp:UpdatePanel ... UpdateMode="Conditional">按需刷新
    <asp:UpdatePanel ... UpdateMode="Always">总是刷新

    Demo1.3-ChildrenAsTriggers:
    <asp:UpdatePanel ... UpdateMode="Conditional" ChildrenAsTriggers="false">本身内容不触发刷新
    <asp:UpdatePanel ... UpdateMode="Always" ChildrenAsTriggers="false">抛出异常

    Demo1.4-Triggers:
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers><asp:PostBackTrigger ControlID="Button2" /></Triggers></asp:UpdatePanel>点击Button2时整个页面刷新
    <Triggers><asp:AsyncPostBackTrigger ControlID="Button2"></Triggers></asp:UpdatePanel>点击Button2时UpdatePanel的内容刷新
    //AsyncPostBackTrigger可以添加EventName,指定控件的某一个事件触发刷新,如EventName="Click"。

    Demo1.5-NestedUpdatePanels:
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
     <ContentTemplate>
      <%= DateTime.Now %>
      <asp:Button ID="Button1" runat="server" Text="Button" />
      <asp:UpdatePanel ID="UpdatePanel2" runat="server">
       <ContentTemplate>
        <%= DateTime.Now %>
        <asp:Button ID="Button2" runat="server" Text="Button" />
       </ContentTemplate>
      </asp:UpdatePanel>
     </ContentTemplate>
    </asp:UpdatePanel>
    ChildrenAsTriggers属性指的是本身直属的内容控件,不包括在其它UpdatePanel中的控件,所以点击Button2时UpdatePanel1没有刷新。

    相关API
    A。UpdatePanel
     1。Update方法:强制某个UpdatePanel更新
     2。IsInpartialRendering:是否在输出过程中(bool)
    B。ScriptManager
     1。GetCurrent静态方法:获得当前页面上的ScriptManage对象。(ScriptManager在母版页的情况下可以方便地取到,不用FindControl)
     2。IsInAsyncPostBack:是否在部分回发过程中(ajax提交过程中)。
     3。RegisterAsyncPostBackControl方法:指定某控件为异步PostBack控件。
     4。RegisterPostBackControl:指定某控件为传统方式PostBack控件。

    Demo2-API:
    Button1在UpdatePanel外。Button2在UpdatePanel内。(只做演示,一般不会这样设计)
    Page_Load事件:
    ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.Button1);//异步方式PostBack
    ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button2);//传统方式PostBack
    Button1_Click事件:
    this.UpdatePanel1.Update();//强制刷新
    效果:Button1会异步提交,并因为自身事件强制UpdatePanel1刷新。Button2会刷新整个页面。

    相关控件:
    A。UpdateProgress(提示是否正在更新):
     1。DynamicLayout属性:隐蔽时是否占位,默认值为true。
     2。DisplayAfter属性:延迟多少时间后显示,单位毫秒,默认值为500。(比如设置为10秒,之后出现提示网络不好,请耐心等待)
     3。AssociatedUpdatePanelID属性:关联的UpdatePanel的ID,默认为null。(不关联时,任何UpdatePanel更新都会显示
    B。Timer
     1。Interval属性:更新时间间隔,单位毫秒,默认为60000(1分钟)。
     2。Tick事件。Interval时间到后会触发此事件(如强制更新某UpdatePanel)。
    注意:并非所有的控件都能在UpdatePanel中工作,如Validators和TreeView等等。

    在UpdatePanel中使用Validators
    引用Validators.dll,在Web.config中的<system.web><pages>下加入:

    Code

    脚本注册
    A。禁止使用Response.Write方法
    B。使用FrameWork所支持的方法(使用ClientScriptManager对象)

    Code

    C。在异步更新的环境中注册脚本
     1。使用ScriptManager对应的静态方法
     2。新方法与原有方法的区别:
      1)方法都要接受一个参数
      2)并非所有注册过的脚本都会生效(当第一个参数为某个UpdatePanel时,注册后UpdatePanel不一定立即刷新)
      3)RegisterExpandoAttribute方法多了个encode参数
     3。这些静态方法完成可以替换原来的方法(上述B中的方法),因为在非异步回送环境中会使用ClientScriptManager的对应方法进行注册。

    错误处理
    A。服务器端ScriptManager设置
     1。AllowCustomErrorsRedirect属性:遇到错误是否自动根据web.config中的设置跳转,默认值为True。
     //配置web.config:<customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>
     2。AsyncPostBackError事件:异步刷新中出现错误时触发的事件。可以写日志之类的。
     3。AsyncPostBackErrorMessage属性:客户端接受到的错误信息。
    B。客户端编程
     1。响应PageRequestManager的endRequest事件。
     2。将errorHandled属性设为true。

    aspx:

    Code

    aspx.cs:

    Code

    动态操作
    A。要在生命周期的Load阶段结束之前完成动态添加控件操作
    B。为每个动态控件指定明确的ID
    C。不要为页面中的UpdatePanel添加新的Trigger
    D。使用ContentTemplateContainer属性向UpdatePanel内添加新控件

    UpdatePanel up = new UpdatePanel();
    up.ID = "UpdatePanel1";
    this.Form.Controls.Add(up);

    LiteralControl lc = new LiteralControl(DateTime.Now.ToString());
    up.ContentTemplateContainer.Controls.Add(lc);

    Button btn = new Button();
    btn.Text = "Refresh";
    up.ContentTemplateContainer.Controls.Add(btn);

    使用UpdatePanel注意事项
    A。请求内容数据大小没有任何减少
     1。采集Form中所有<input/>并发送
     2。包含ViewState
    B。既然发到服务端的数据没有减少,就必须减少从服务器端返回的数据
     1。使用多个UpdatePanel包含多个部分(不要用一个大的UpdatePanel把整个页括起来,比如一些静态文本的数据也从服务器返回,这是没有必要的)
     2。UpdateMode尽量不要设为Always(用triggers或用update方法)

  • 相关阅读:
    [湖南集训]谈笑风生
    【SCOI2010】序列操作
    ●BZOJ 3994 [SDOI2015]约数个数和
    ●BZOJ 3309 DZY Loves Math
    ●UOJ 21 缩进优化
    ●BZOJ 2693 jzptab
    ●BZOJ 2154 Crash的数字表格
    ●BZOJ 3529 [Sdoi2014]数表
    ●2301 [HAOI2011] Problem b
    ●BZOJ 2820 YY的GCD
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1558805.html
Copyright © 2020-2023  润新知