[英]Not able to get the value from dynamically created textbox
我使用以下代碼在頁面加載中以編程方式創建了一個文本框:
HtmlTableRow row = new HtmlTableRow();
HtmlTableCell cell1 = new HtmlTableCell();
HtmlTableCell cell2 = new HtmlTableCell();
cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
cell2.Controls.Add(new TextBox() { ID = TextBoxID1 });
row.Cells.Add(cell1);
row.Cells.Add(cell2);
dynamictable.Rows.Add(row);
在按鈕單擊事件中,我試圖從文本框中獲取值並將該值分配給靜態創建的anohter TextBox,如下所示:
string id = TextBoxID1
TextBox tb = (TextBox)dynamictable.FindControl(id);
string valuetext = tb.Text;
TextBox1.Text = valuetext;
正在收到“對象引用錯誤”,我是說,我無法找到控件並創建TextBox。
我也嘗試創建TextBox如下方法:
TextBox tb = (TextBox)form1.FindControl(id);
TextBox tb = (TextBox)this.form1.FindControl(id);
TextBox tb = (TextBox)page.FindControl(id);
任何幫助都會對我有很大幫助。
我認為您可能需要先找到行,然后再找到單元格,然后找到文本框。
意味着盡管這樣做:
TextBox tb = (TextBox)dynamictable.FindControl(id);
您需要先找到特定的行
// find by it or index etc
HtmlTableRow tb = (HtmlTableRow)dynamictable.FindControl(id);
// Then find the Table cell and then find textbox..
我希望這能幫到您
您可能有一個創建表的方法,您需要在回發時調用它以確保一切都已設置。
protected HtmlTable dynamictable;
protected TextBox tb = new TextBox();
protected override void OnInit(EventArgs args)
{
base.OnInit(args);
CreateTableRows();
}
private void CreateTableRows()
{
HtmlTableRow row = new HtmlTableRow();
HtmlTableCell cell1 = new HtmlTableCell();
HtmlTableCell cell2 = new HtmlTableCell();
cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
cell2.Controls.Add(tb });
row.Cells.Add(cell1);
row.Cells.Add(cell2);
dynamictable.Rows.Add(row);
}
protected void OnClick(object sender, EventArgs args)
{
return tb.Text;
}
為了使用動態控件,您需要完全了解ASP.Net頁面生命周期
需要在每個帖子上重新創建動態控件,為您創建動態控件沒有背后的魔力,可悲的是您必須顯式地創建它們。
請記住,頁面只是在執行請求時創建的類,而在將響應發送回用戶時銷毀的頁面 。 因此,需要每次重新創建控件。 當控件在頁面上靜態聲明時,將為您完成此操作。 但是對於動態控件,您需要在每個帖子上重新創建它們
@BobTodd提供的代碼是一個很好的起點,但是Microsoft的建議是應在Page_Init
事件中創建動態控件,以便將其事件與其余靜態控件同步。
因此您的代碼如下所示:
protected void Page_Init(object sender, EventArgs e)
{
CreateTable();
}
現在,請記住這個簡單的啞巴規則,當使用動態控件時,請始終使用相同的ID 。 這真的很重要,因為頁面視圖狀態是根據控件的ID重新加載的。
要考慮的另一件事是,在頁面上的每個控件上調用LoadViewState
方法之前,在Init
事件中創建的所有控件都不會加載其視圖狀態。 這意味着,如果您預訂Page_PreLoad
或Page_Load
事件,則可以安全地設置控件的屬性,因為它們的值已經從viewstate中加載,因此您的新值將不會被覆蓋。
這意味着在PreLoad
事件之前分配給控件的任何屬性都將被頁面viewstate值替換 。 因此,在加載視圖狀態后設置動態控件屬性被認為是一種好習慣。
快速查看一下ASP.Net頁面的生命周期:
使用隱藏字段在Java腳本中存儲動態創建的文本框的值
還添加runat="server"
中隱藏費爾德
您可以從隱藏的字段訪問您的文本框值。
另一種方法是使用javascript將值存儲在查詢字符串中,然后在后端讀取該值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.