我正在使用带有大量窗格的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>
答案 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有同样的问题,这个代码解决了我的问题