当我的asp.net AJAX更新面板更新时,我遇到了一个问题,它在我的表格顶部而不是在它所属的地方呈现内容是我的代码:
<tr>
<td>
</td>
<td>
<asp:CheckBox ID="ddCheckbox" runat="server" Text="Checkbox"
AutoPostBack="true" OnCheckedChanged="ddCheckboxChanged" />
</td>
</tr>
<asp:UpdatePanel ID="uxUpdatePanel" runat="server" RenderMode="Inline" UpdateMode="Conditional">
<ContentTemplate>
<tr>
<td>
Some Field:
</td>
<td>
<asp:TextBox ID="ddSomeField" runat="server" />
</td>
</tr>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddCheckbox" EventName="CheckedChanged" />
</Triggers>
</asp:UpdatePanel>
在我的服务器端事件中,我只是启用/禁用文本框。
答案 0 :(得分:8)
1)创建自定义updatepanel控件(从SingingEels复制/粘贴)
2)将此自定义updatepanel控件与属性RenderedElement="TBODY"
3)按照以下方式嵌套你的桌子:
<TABLE>
<TR>
<TD>outside updatepanel</TD>
</TR>
<SingingEels:SemanticUpdatePanel ID="myUpdatePanel" runat="server" RenderedElement="TBODY">
<ContentTemplate>
<TR>
<TD>inside updatepanel - 1th row</TD>
</TR>
<TR>
<TD>inside updatepanel - 2nd row</TD>
</TR>
<TR>
<TD>inside updatepanel - last row</TD>
</TR>
</ContentTemplate>
</SingingEels:SemanticUpdatePanel>
<TR>
<TD>outside updatepanel</TD>
</TR>
</TABLE>
答案 1 :(得分:4)
我认为这是由于您如何嵌套“更新”面板。如果将更新面板更改为td的子项,而不是表:
<tr>
<td>
Some Field:
</td>
<td>
<asp:UpdatePanel ID="uxUpdatePanel" runat="server" RenderMode="Inline" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="ddSomeField" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddCheckbox" EventName="CheckedChanged" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
你应该全部修好。
答案 2 :(得分:0)
您是否已完成视图源以确认它实际上是在HTML本身内的该位置呈现它?如果表格格式错误,浏览器有时会在表格外部呈现标签。它似乎可以在HTML本身中正确定义,但缺少结束标记等可能会导致它以这种方式呈现。
答案 3 :(得分:0)
当更新面板回发到服务器时,它会将所有内容发回(包括viewstate)。为什么不做一些简单的JavaScript?它会更有效率。