2015-10-06 128 views
0

我想在按鈕單擊事件中檢索文本框值,但一旦單擊該按鈕,回發觸發並且該值爲空。我試圖在(!isPostBack)中創建文本框,但似乎不起作用。無法從動態創建的文本框中讀取值

protected void Page_Load(object sender, EventArgs e) 
{ 
    Form.Controls.Add(t); 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    predictionList = dc.getPredictions(Convert.ToInt32(Session["accountId"])); 
    fixtureList = dc.getFixtures(); 
    t.CssClass = "panel panel-success table table-striped"; 
    sortLists(); 
    foreach (Fixture f in newList) 
    { 
      TableRow tr = new TableRow(); 
      TableCell tc1= new TableCell(); 
      TextBox tb1= new TextBox(); 
      tb1.ID = "tb1"; 
      tc1.Controls.Add(tb1); 
      tr.Cells.Add(tc1); 
      t.Rows.Add(tr); 
    } 
} 

這裏我添加了控制,在這裏我要處理無論是在文本框中:

protected void btSubmit_Click(object sender, EventArgs e) 
{ 
    foreach (TableRow r in t.Rows) 
    { 
     string textboxRead= ((TextBox)r.FindControl("tb1")).text; 
     int textboxInt = Convert.ToInt32(textboxRead); 
    } 
} 
+0

你得到一個錯誤? – user990423

+0

不,沒有錯誤。值只是空的。 – Proliges

+0

在for循環中,您將textbox1分配爲所有創建的文本框的ID。我不知道這是否與您的問題有關,但可能會導致其他問題。 –

回答

0

難道FindControl()沒有找到文本,因爲它不遞歸工作?

即,您已將文本框添加到TableCell,但您正在執行TableRowFindControl()調用,而不是TableCell。所以要麼從Cell中調用FindControl(),要麼使用遞歸版本。

對於的FindControl()的遞歸版本,請參見:Better way to find control in ASP.NET

+0

這可能是我的問題的答案,謝謝。 – Proliges

0

試試這個:

TextBox tb1; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     tb1 = ((TextBox)r.FindControl("tb1"));     
    } 
} 

protected void btSubmit_Click(object sender, EventArgs e) 
{ 
    string textboxRead = tb1.Text; // here you can get the tb1.Text 
    int textboxInt = Convert.ToInt32(textboxRead); 
} 
0

希望這會幫助你。

protected void AddTextBox(object sender, EventArgs e) 
{ 
    int index = pnlTextBoxes.Controls.OfType<TextBox>().ToList().Count + 1; 
    this.CreateTextBox("txtDynamic" + index); 
} 


private void CreateTextBox(string id) 
{ 
    TextBox txt = new TextBox(); 
    txt.ID = id; 
    pnlTextBoxes.Controls.Add(txt); 

    Literal lt = new Literal(); 
    lt.Text = "<br />"; 
    pnlTextBoxes.Controls.Add(lt); 
} 

看到此鏈接瞭解詳細信息: http://www.aspsnippets.com/Articles/Get-Value-Text-of-dynamically-created-TextBox-in-ASPNet-using-C-and-VBNet.aspx

0

你需要給該ID的所有的動態創建控件。這是強制性的,以防止回傳中的任何含糊不清。

這包括tr,tc1,tb1並且甚至可以是t控件。

而且,找到該值,使用此片段:

protected void btSubmit_Click(object sender, EventArgs e) 
{ 
    foreach (TableRow tr in t.Rows) 
    { 
     var tc1 = (TableCell)tr.FindControl("tc1"); 
     var tb1 = (TextBox)tc1.FindControl("tb1"); 
     int textboxInt = Convert.ToInt32(tb1.Text); 
    } 
}