內動態添加文本框的值下面是ASPX控制。從表中獲取更新面板
<asp:UpdatePanel runat="server" ID="panel" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="holder"></asp:PlaceHolder>
<asp:Button runat="server" ID="bt" Text="Add" onclick="AddTxt" />
<asp:Button runat="server" ID="btn1" Text="Refresh" onclick="btn1_Click" />
</ContentTemplate>
當添加按鈕被點擊我創建一個動態表。下面是C#代碼
protected void AddTxt(object sender, EventArgs e)
{
int tblRows = 3;
int tblCols = 3;
Table tbl = new Table();
for (int i = 0; i < tblRows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < tblCols; j++)
{
TableCell tc = new TableCell();
TextBox txtBox = new TextBox();
txtBox.ID = "txt" + i.ToString() + j.ToString();
//txtBox.TextChanged += new EventHandler(txt_TextChanged);
tc.Controls.Add(txtBox);
tr.Cells.Add(tc);
if (Session["ctls"] != null)
{
Session["ctls"] += ";t";
}
else
{
Session["ctls"] = "t";
}
}
tbl.Rows.Add(tr);
}
holder.Controls.Add(tbl);
panel.Update();
}
當局部回傳發生在刷新按鈕的點擊我不能夠得到這是由用戶在文本框中更新值。控件將具有空文本。
protected void Page_Load(object sender, EventArgs e)
{
foreach (Control c in holder.Controls)
{
if (c is TextBox)
{
}
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (Session["ctls"] != null)
{
string[] ctls = Session["ctls"].ToString().Split(';');
foreach (string ctlType in ctls)
{
if (string.Compare(ctlType, "t") == 0)
{
holder.Controls.Add(new TextBox());
}
}
}
}
任何人請幫助/給我一個提示如何解決更新面板內的動態控件。
感謝您的快速回復。你的意思是我必須在init()上再次使用相同的控件創建同一個表? – Naveen
@Naveen - 是的,這是正確的。服務器控件和ViewState並不總是方便的現實。這就是人們開始不喜歡ASP.NET WebForms模型的原因,尤其是當您開始在代碼中注入越來越多的AJAX功能時。 ASP.NET頁面生命週期和AJAX往往會讓人頭疼不已。 :-( –
@卡爾·安德森當我打電話其中創建表AddTxt()同樣的方法,它給我的錯誤!「Microsoft JScript運行錯誤:Sys.WebForms.PageRequestManagerServerErrorException:多個控件使用相同的ID‘txt00’被發現。FindControl需要控件具有唯一的ID。」 – Naveen