ASP.Net多个更新面板在不应该更新时进行更新

时间:2011-08-17 03:48:03

标签: asp.net triggers updatepanel

我在网页上有一些所有设置为UpdateMode =“Conditional”的更新面板,但是当触发其中一个更新面板上的AsyncPostBackTrigger时,所有更新面板都会刷新。

以下是更新面板HTML标记之一:

<asp:UpdatePanel ID="pnls1FieldUpdate" runat="server" 
                 UpdateMode="Conditional">
    <ContentTemplate>
        <table class="FillInGrid" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    <asp:TextBox ID="txtS1ExpDate" runat="server" Width="67px" TabIndex="14"></asp:TextBox>
                    <asp:ImageButton ID="cmdS1ExpDate" runat="server" 
                         ImageUrl="~/images/calendar.png" TabIndex="15" />
                    <asp:CalendarExtender ID="CalendarExtender6" runat="server" TargetControlID="txtS1ExpDate" PopupButtonID="cmdS1ExpDate" Format="dd/MM/yyyy">
                    </asp:CalendarExtender>
                </td>
                <td>
                    <asp:DropDownList ID="cboS1ExpenseItem" runat="server" Width="200px" 
                        onselectedindexchanged="cboS1ExpenseItem_SelectedIndexChanged" 
                        AutoPostBack="True" TabIndex="16">
                    </asp:DropDownList>
                </td>
                <td>
                    <asp:TextBox ID="txtS1ExpAmt" runat="server" Width="78px" ontextchanged="txtS1ExpAmt_TextChanged" TabIndex="18" AutoPostBack="True"></asp:TextBox>
                </td>
                <td>
                    <asp:TextBox ID="txtS1ExpGST" runat="server" Width="78px" TabIndex="19"></asp:TextBox>
                </td>
                <td>
                <asp:TextBox ID="txtS1ExpOC" runat="server" Width="78px" 
                        ontextchanged="txtS1ExpOC_TextChanged" TabIndex="20" AutoPostBack="True"></asp:TextBox>
                </td>
                <td>
                    <asp:Button ID="cmdAddSection1Exp" runat="server" Text="Add" Width="80px" 
                        onclick="cmdAddSection1Exp_Click" TabIndex="21" /></td>
            </tr>
            <tr>
                <td colspan="6">
                    <table>
                        <tr>
                            <td class="HdrGnrl tRt" style="width:105px;">Sub item</td>
                            <td style="width:220px;">
                                <asp:DropDownList ID="cboS1ExpenseSubItem" runat="server" Width="200px" 
                                    TabIndex="17">
                                </asp:DropDownList>
                            </td>
                            <td style="width:85px;"></td>
                            <td style="width:85px;"></td>
                            <td style="width:85px;"></td>
                            <td style="width:100px;"></td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txtS1ExpAmt" EventName="TextChanged" />
        <asp:AsyncPostBackTrigger ControlID="txtS1ExpOC" EventName="TextChanged" />
        <asp:AsyncPostBackTrigger ControlID="cboS1ExpenseItem" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>
<asp:UpdatePanelAnimationExtender ID="UpdatePanelAnimationExtender4" TargetControlID="pnls1FieldUpdate" runat="server">
    <Animations>
        <OnUpdating>
            <Sequence>
                <FadeOut AnimationTarget="pnlExpense" minimumOpacity=".2" />
            </Sequence>
        </OnUpdating>
        <OnUpdated>
            <Sequence>
                <FadeIn AnimationTarget="pnlExpense" minimumOpacity=".2" />
            </Sequence>
        </OnUpdated>
    </Animations>
</asp:UpdatePanelAnimationExtender>

为什么所有的updatepanel都在不应该更新?

1 个答案:

答案 0 :(得分:1)

在您发布的代码中,只有一个UpdatePanel

但请注意,默认情况下 ChildrenAsTriggers Property 设置为true,因此会为每个内部的控件自动添加AsyncPostBackTrigger UpdatePanel。所以我首先要尝试将其设置为false

<asp:UpdatePanel ID="pnls1FieldUpdate" 
                 runat="server" 
                 UpdateMode="Conditional"
                 ChildrenAsTriggers="false" >