24
2014
06

UpdatePanel 的属性相关说明 及 UpdateMode刷新规则

 


一、相关说明

ChildrenAsTriggers
当 UpdateMode 属性为 Condititonal 时, UpdatePanel 中的子控伯的异步回送是会引发 UpdatePanel 的更新 

RenderMode
表示 UpdatePanel 最终呈现的 HTML 无缘, Block(默认)表示<div>, lnline 表示<span> 

Triggers
 用来引起更新的事件

UpdateMode
表示 UpdatePanel 的更新换模式,有两个选项:Always 和 Conditional.

Always 是不管有没有 Tiggers,其他控件都将更新该 UpdatePanel,

Conditional 表示只当前 UpdatePanel 的Trigger,ChildrenAsTriggers 属性为 true 时,当前 UpdatePanel 中控件引发的异步回送或者整页回送,基是服务器调用 Update() 方法时才会引发更新该 UpdatePanel 

UpdatePanel 的刷新状况依据 UpdateMode 属性的设置面的所不同.

上面那段话也就是说:
UpdatePanel 的UpdateMode 属性为:  Always  时.页面上 UpdatePanel 控件中的任何一个控件触发动作,都会异致页面上的任何一个
UpdatePanel 尝试刷其内容

当 UpdateMode 属性改为 Conditional 时,则该 UpdatePanel 的刷新关况依下面条件而定:
1. 是该 UpdatePanel 内的控件(包括上篇说的 Trigger 方式设置的) 触发的,该 UpdatePanel 控件才刷新其内容
2. 是调用了该 UpdatePanel 控件的 Update() 方法, 该 UpdatePanel 控件才刷新其内容
3. 当 UpdatePanel 是嵌套时,(UpdatePanel 中还有别一个UpdatePanel),父级  UpdatePanel 发生刷新,子级也会跟随刷新

 

二、刷新规则

在一个界面上,可以使用的UpdatePanel的数量没有限制,而且UpdatePanel还可以嵌套(下例)。这里很重要的一个属性是UpdateMode属性。

 

如果一个UpdatePanel的UpdateMode属性设置为Always,则另外一个UpdatePanel中的某个服务器控件(如按钮)触发了刷新后,这个UpdatePanel也一起刷新。

 

如果UpdatePanel的UpdateMode设置为Conditional,则只有本UpdatePanel中的服务器控件触发刷新,或者嵌套在外部的UpdatePanel中的服务器控件触发刷新后,此UpdatePanel才刷新。

那么产品种类、子类、产品列表三级联动的实例中,我们可以设置三层嵌套,然后将其UpdateMode属性都设置为Conditional。那么我们选择了一个产品种类后,其种类、子类和产品都要刷新;选择了某个子类后,子类和产品会刷新,而种类不刷新。这样就基本达到了要求。

可能有时我们的要求更苛刻一些。考虑到产品种类的刷新是没有意义的,我们希望点击种类时,只有子类和产品刷新,而种类不刷新。

这时就用到了ChildrenAsTriggers属性,该属性表示UpdatePanel内部的控件是否出发回传刷新操作,该属性默认值为true。如果我们把上个例子中外层UpdatePanel的该属性改成false,运行会看到点击“外部刷新”按钮时,没有触发刷新操作(两个时间都没有改变);而点击“内部刷新”按钮时,内部的时间改变了,外边的没有。

这似乎并不符合我们的要求,我们希望的是点击外部按钮后,内部的刷新,而外部的不刷新(就是产品种类不刷新,子类和产品刷新),我们可以用一行程序实现这个功能。

为“外部刷新”按钮增加Click事件,输入以下代码:

    protected void btnOuter_Click(object sender, EventArgs e)

    {

        UpdatePanel2.Update();

    }

运行,可以看到不管点击哪个按钮,都只有内部的时间刷新了。

 

三.母版页中使用UpdatePanel

 

    UpdatePanel不仅可以使用在普通aspx中,还可以用在母版页中。因为母版页和内容页运行时要组合成一个页面,而一个页面中只能有一个ScriptManager,因此ScriptManager只能放到母版页中,而母版页和内容页中都可以放多个UpdatePanel。

    同时,如果母版页的ContentPlaceHolder占位控件放到了一个UpdatePanel中,则该UpdatePanel就和内容页的UpdatePanel形成了嵌套关系

 

四、例子

<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            内部最后刷新:<%=DateTime.Now.ToString() %>
                            <br />
                            <asp:Button ID="btnInner" runat="server" Text="内部刷新" />
                        </ContentTemplate>
                    </asp:UpdatePanel>
                    <asp:Button ID="btnOuter" runat="server" Text="外部刷新" />
                    <br />
                    外部最后刷新:<%=DateTime.Now.ToString() %>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </form>
</body>

 

 

« 上一篇下一篇 »

相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。