【发布时间】:2010-10-13 11:23:35
【问题描述】:
我熟悉在第一次加载页面和后续回发时创建和保留动态控件,但我在以下用户启动场景中遇到了问题。 .
在我的演示中,我有一个占位符、两个按钮和一个文字
<div>
<asp:PlaceHolder ID="phResponses" runat="server" />
</div>
<div>
<asp:Button ID="btnAdd" Text="Add" runat="server" OnClick="Add"/>
<asp:Button ID="btnInspect" Text="Inspect" runat="server" OnClick="Inspect"/>
</div>
<div>
<asp:Literal ID="litResult" runat="server"/>
</div>
我希望用户能够单击添加按钮以提供响应,所以我...
protected void Page_Init(object sender, EventArgs e)
{
BuildControls();
}
protected void Add(object sender, EventArgs e)
{
BuildControls();
}
protected void BuildControls()
{
phResponses.Controls.Add(new LiteralControl { ID = "response_" + _Count.ToString() });
_Count++;
}
_Count 是一个静态成员变量,使我能够为新控件拥有唯一的 ID。我意识到我需要重建 Page_Init 上的动态控件,但问题是每次回发时我都会得到 2 个新的 Literal 控件。此外,如果将任何 Text 属性放入新控件中,则在重建控件时它会丢失。
那么如何避免添加多个控件,以及如何在重建这些控件时保留新添加的属性?
我使用以下方法检查响应
protected void Inspect(object sender, EventArgs e)
{
foreach (var control in phResponses.Controls)
{
if (control is LiteralControl)
{
litResults.Text += "<p>" + control.Text + " : " + control.ID + "</p>";
}
}
}
由于 Page_Init 上的重建,它本身添加了另一个不需要的控件
【问题讨论】:
标签: asp.net page-lifecycle dynamic-controls