我熟悉在頁面的第一次加載和後續回發時創建並保留動態控件,但我遇到以下問題用戶啓動情景......如何添加基於用戶輸入的持久動態控件(不是在初始頁面加載時)
在我的演示中,我有一個佔位符,兩個按鈕和一個文字
<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個新的文字控件。另外,如果將任何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
重建