控制添加回發問題
回答
在頁面初始化事件中添加控件,並在回發時將它們保存在視圖狀態中。確保他們有一個唯一的ID。
請參閱此鏈接...
ASP.NET Add Control on postback
一個非常簡單的例子..
public partial class MyPage : Page
{
TextBox tb;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
tb = new TextBox();
tb.ID = "testtb";
Page.Form.Controls.Add(tb);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//tb.Text will have whatever text the user entered upon postback
}
}
因爲你必須重新在每個回發的控件, see this article
好吧,我可以保留在ViewState博客中嗎?我希望當我添加一個控件時,它必須在每個回發中。如果我重新創建所有控件,我將丟失控件的信息和用戶輸入的其他信息(如控件中的文本框)。 那麼解決方案是什麼? – atromgame 2010-01-11 14:36:16
加載控制後,應該始終在其ID屬性分配一個唯一的ID的用戶控件。你應該總是在回發時重新創建UserControl。
要保存posback數據(即TextBox'es),必須在調用base.LoadViewState之後,在處理回發數據之前,在overriden LoadViewState方法中加載UserControl。
好的,但我可以保留在ViewState博客?我希望當我添加一個控件時,它必須在每個回發中。如果我重新創建所有控件,我將丟失控件的信息和用戶輸入的其他信息(如控件中的文本框)。那麼解決方案是什麼? – atromgame 2010-01-11 14:37:36
我已經更新了我的答案。 – 2010-01-11 14:49:38
添加控件在運行時間和節省回傳:
int NumberOfControls = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["b1"] = 0;
}
else
{
if ((int)ViewState["b1"] > 0)
{
CreateBtn();
}
}
}
protected void btn1_Click(object sender, EventArgs e)
{
NumberOfControls = (int)ViewState["b1"];
Button b1 = new Button();
// b1.Attributes.Add("onclick", "x()");
b1.Text = "test2";
b1.ID = "b1_" + ++NumberOfControls;
b1.Click +=new System.EventHandler(btn11);
Panel1.Controls.Add(b1);
ViewState["b1"] = NumberOfControls;
}
protected void CreateBtn()
{
for (int i = 0; i < (int)ViewState["b1"];i++)
{
Button b1 = new Button();
// b1.Attributes.Add("onclick", "x()");
b1.Text = "test2";
b1.ID = "b1_" + i;
b1.Click += new System.EventHandler(btn11);
Panel1.Controls.Add(b1);
}
}
protected void btn11(object sender, System.EventArgs e)
{
Response.Redirect("AboutUs.aspx");
}
你如何添加你的控件是在CreateChildControls事件上嗎?你能提供一些示例代碼嗎? – Sheff 2010-01-11 14:10:11
Control _obj = LoadControl(「HaberObje.ascx」); String _Link = _row [「link」]。ToString(); String _Resim =「resim.png」; ((HaberObje)_obj).SetInfo(_row [「baslik」]。ToString) pnlHaber.Controls.Add(_obj); //這裏我添加控制 但是當Postback執行時我丟失了所有包含的控件 – atromgame 2010-01-11 14:24:02