我正在使用带有大量窗格的 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>