ASP.NET Webforms UpdatePanel重复内容

时间:2010-02-27 15:17:08

标签: asp.net webforms updatepanel

我已经处理了一个我正在努力理解的巨大Webforms项目,而且我遇到了一个问题,即更新面板正在复制其大量内容。面板的aspx代码非常庞大,数百行很长,但它基本上看起来就像这个简单的例子,只有很多asp:TextBoxasp: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";
}

当您单击LinkBut​​ton时,我希望在结果中看到<div id="a">部分,但在TextBox中使用文本'oranges'。实际得到的是<div id="a">带有'oranges',后跟带有空TextBox的原始<div id="a">。最糟糕的是它在这个简单的示例中没有这样做,甚至在我创建的包含所有原始asp:TextBoxasp:ListBox但填充了虚拟数据的页面中也没有。有谁能指出我处理这个问题的好方法?

3 个答案:

答案 0 :(得分:3)

另一种解决方案是确保asp:UpdatePanel内的所有HTML标记关闭。在我的情况下,我在header文件(UpdatePanel控件之外)中放置了打开的Site.Master标记,并在UpdatePanel控件中放置了结束标头标记(在aspx页面上)。因此,每次UpdatePanel回发时,它都会再次重新创建结束标头标记,从而导致内容被复制。将结束标记放入Site.Master文件后,一切都很顺利。

答案 1 :(得分:3)

您可能已经尝试过此操作,但在实际问题页面中,是否可以从更新面板中删除尽可能多的服务器控件,然后留下违规文本框,然后看看会发生什么?我猜你可能要注释掉很多.cs / .vb代码,这可能很痛苦。

还尝试删除更新面板,看看会发生什么。

答案 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>