我已经处理了一个我正在努力理解的巨大Webforms项目,而且我遇到了一个问题,即更新面板正在复制其大量内容。面板的aspx代码非常庞大,数百行很长,但它基本上看起来就像这个简单的例子,只有很多asp:TextBox
和asp:ListBox
。
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" RenderMode="Block" UpdateMode="Conditional">
<ContentTemplate>
<div><table><tbody><tr><td>
<label>Search</label><asp:TextBox ID="Search" runat="server" />
<asp:LinkButton runat="server" OnClick="find_Click" >Find</asp:LinkButton>
</td></tr></tbody></table></div>
<div id="a"><table><tbody><tr><td>
<label>Result</label><asp:TextBox ID="Result" runat="server" />
</td></tr></tbody></table></div>
</ContentTemplate>
</asp:UpdatePanel>
和这样的代码背后。
public void find_Click(Object sender, EventArgs e)
{
Result.Text = "oranges";
}
当您单击LinkButton时,我希望在结果中看到<div id="a">
部分,但在TextBox中使用文本'oranges'。实际得到的是<div id="a">
带有'oranges',后跟带有空TextBox的原始<div id="a">
。最糟糕的是它在这个简单的示例中没有这样做,甚至在我创建的包含所有原始asp:TextBox
和asp:ListBox
但填充了虚拟数据的页面中也没有。有谁能指出我处理这个问题的好方法?
答案 0 :(得分:3)
您可能已经尝试过此操作,但在实际问题页面中,是否可以从更新面板中删除尽可能多的服务器控件,然后留下违规文本框,然后看看会发生什么?我猜你可能要注释掉很多.cs / .vb代码,这可能很痛苦。
还尝试删除更新面板,看看会发生什么。
答案 1 :(得分:3)
另一种解决方案是确保asp:UpdatePanel
内的所有HTML标记关闭。在我的情况下,我在header
文件(UpdatePanel控件之外)中放置了打开的Site.Master
标记,并在UpdatePanel控件中放置了结束标头标记(在aspx
页面上)。因此,每次UpdatePanel回发时,它都会再次重新创建结束标头标记,从而导致内容被复制。将结束标记放入Site.Master文件后,一切都很顺利。
答案 2 :(得分:0)
稍后会有一些严重的重构,现在它看起来像是一个非常臃肿的版本。
<div><table><tbody><tr><td>
<label>Search</label><asp:TextBox ID="Search" runat="server" />
<asp:LinkButton runat="server" OnClick="find_Click" >Find</asp:LinkButton>
</td></tr></tbody></table></div>
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" RenderMode="Block" UpdateMode="Conditional">
<ContentTemplate>
<div id="a"><table><tbody><tr><td>
<label>Result</label><asp:TextBox ID="Result" runat="server" />
</td></tr></tbody></table></div>
</ContentTemplate>
</asp:UpdatePanel>