0

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

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

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

有人知道为什么会发生这种情况以及如何解决吗?

已更新代码 这是其中一个面板的示例。不要因为使用表格而被冒犯 - 这是一张实际的表格,我不只是将它用于布局目的!

<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>
4

3 回答 3

0

答案非常简单,尽管我太累了,无法弄清楚为什么它现在才起作用。我只需要ClientIDMode = AutoID在 RadioButtonLists 和 CheckBoxLists 上进行设置,它们现在会触发异步回发而不是完整回发。它们也不需要在自己的 UpdatePanel 中。

从这个 SO question得到了答案。

于 2013-04-11T16:51:44.790 回答
0

我相信您也需要rblTransportation RadioButtonList 包裹在 UpdatePanel 中。

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

于 2013-04-11T15:21:13.147 回答
-1

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

于 2013-04-11T14:07:05.583 回答