手风琴第一面板在部分回发时闪烁

时间:2013-04-11 13:51:43

标签: asp.net postback accordion

我正在使用带有大量窗格的ASP.NET Accordion控件来存储数据。在几个窗格中有一些UpdatePanel,因此可以启用或禁用这些面板中的某些控件,以防止用户将值输入到被其他地方输入的值排除的字段中。

一切正常,但由于某种原因,在触发UpdatePanel回发的大约一半的情况下(通过指定的AsyncPostBack触发器),Accordion的第一个窗格会暂时扩展和折叠。当页面执行完整的回发时,这会给你带来可怕的“闪烁”体验,这正是我试图通过使用UpdatePanel来避免的。

问题似乎与第一个窗格的内容无关 - 我尝试完全删除第一个窗格,以便第二个窗格成为第一个窗格,同样的事情发生。

任何人都知道为什么会发生这种情况以及如何解决这个问题?

更新代码 这是其中一个面板的示例。不要因使用表格而过于冒犯 - 这是一张真正的桌子,我不只是将它用于布局目的!

<tr class="grouprow">
    <td>Transportation</td>
    <td><asp:RadioButtonList ID="rblTransportation" runat="server" RepeatDirection="Horizontal" SelectedValue='<%# Bind("AdmissionTransportation")%>' AutoPostBack="true" 
            OnSelectedIndexChanged="rblTransportation_SelectedIndexChanged" >
            <asp:ListItem Text="Unknown" Value="" />
            <asp:ListItem Text="Yes" Value="True" />
            <asp:ListItem Text="No" Value="False" />                                    
    </asp:RadioButtonList></td><td></td>
</tr>
<tr class="grouprow">
    <td>Transportation Duration</td>
    <td><asp:UpdatePanel ID="updTransportationHours" runat="server" UpdateMode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="rblTransportation" EventName="selectedindexchanged" />
            </Triggers>
            <ContentTemplate>
                <asp:TextBox ID="txtTransportationHours" runat="server" Text='<%# Bind("AdmissionTransportationHours")%>' CssClass="tinytextbox" />
                <label class="unit">Hours</label>
                <asp:RegularExpressionValidator ID="revTransportationHours" runat="server" ControlToValidate="txtTransportationHours" ValidationExpression="\d{1,3}(\.\d{1,2})?"
                    ValidationGroup="Past30Days" ErrorMessage="Invalid format for Transporation Duration. Please enter in format 'xxx.xx', e.g. '3.25'" Display="Dynamic" 
                    CssClass="error" >*</asp:RegularExpressionValidator>
                <asp:RangeValidator ID="rvTransportationDuration" runat="server" ControlToValidate="txtTransportationHours" CssClass="error" ValidationGroup="Past30Days" type="Double"
                    ErrorMessage="The Transportation Duration cannot be more than 100" MinimumValue="0" MaximumValue="100" >*</asp:RangeValidator>
            </ContentTemplate>
    </asp:UpdatePanel></td><td></td>
</tr>

3 个答案:

答案 0 :(得分:0)

我相信您还需要将rblTransportation RadioButtonList包装在UpdatePanel中。

由于该控件不在UpdatePanel中,因此会导致完整的回发。

答案 1 :(得分:0)

答案很简单,虽然我太累了,不知道为什么它现在才起作用。我只需要在RadioButtonLists和CheckBoxLists上设置ClientIDMode = AutoID,它们现在会触发异步回发而不是完整回发。它们也不需要在自己的UpdatePanel中。

我得到了答案from this SO question

答案 2 :(得分:-1)

你能试试<asp:blablacontrol style="Display:none;"> </asp:control>吗 modalpanels有同样的问题,这个代码解决了我的问题