簡體   English   中英

無法從動態創建的文本框中獲取值

[英]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_PreLoadPage_Load事件,則可以安全地設置控件的屬性,因為它們的值已經從viewstate中加載,因此您的新值將不會被覆蓋。

這意味着在PreLoad事件之前分配給控件的任何屬性都將被頁面viewstate值替換 因此,在加載視圖狀態后設置動態控件屬性被認為是一種好習慣。

快速查看一下ASP.Net頁面的生命周期:

在此處輸入圖片說明

使用隱藏字段在Java腳本中存儲動態創建的文本框的值

還添加runat="server"中隱藏費爾德

您可以從隱藏的字段訪問您的文本框值。

另一種方法是使用javascript將值存儲在查詢字符串中,然后在后端讀取該值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM