2015-03-31 105 views
0

我能够动态地添加文本框并且我无法使用动态添加的文本框的值 这是我的代码如何在asp.net C#中动态地添加文本框并在添加后使用文本框的值

int i = 0; 
List<string> controlidlist = new List<string>(); 
protected override void LoadViewState(object savedState) 
{ 
    base.LoadViewState(savedState); 
    controlidlist = (List<string>)ViewState["controlidlist"]; 
    foreach (string Id in controlidlist) 
    { 
     i++; 
     TextBox tb = new TextBox(); 
     tb.ID = Id; 
     LiteralControl lineBreak = new LiteralControl(); 
     PlaceHolder1.Controls.Add(tb); 
     PlaceHolder1.Controls.Add(lineBreak); 
    } 
} 

我在这里进行动态地添加文本框

protected void Button1_Click(object sender, EventArgs e) 
{ 

    i++; 
    TextBox tb = new TextBox(); 
    tb.ID = "textboxes" + i; 
    tb.Text = "textbox" + i; 

    LiteralControl lineBreak = new LiteralControl("<br>"); 
    PlaceHolder1.Controls.Add(tb); 
    PlaceHolder1.Controls.Add(lineBreak); 
    controlidlist.Add(tb.ID); 
    ViewState["controlidlist"] = controlidlist; 

} 

在这里,我想尝试获得其动态添加

文本框值
protected void datainput_Click(object sender, EventArgs e) 
{ 
    string m = string.Empty; 
    for (int f = 0; f < i; f++) 
    { 
     TextBox t = (TextBox)FindControl("textboxes"+f); 
     string k = t.Text; 
     m = m +","+k; 


     } 
    string h = m; 
} 

出现的错误是 “未将对象引用设置为对象的实例”。 at string k = t.Text;

回答

1

将它添加到一个容器:

<asp:Panel runat="server" ID="pnlTextboxes"></asp:Panel> 

foreach (string Id in controlidlist) 
    { 
     i++; 
     TextBox tb = new TextBox(); 
     tb.ID = Id; 
     LiteralControl lineBreak = new LiteralControl(); 
     pnlTextboxes.Controls.Add(tb); 
     pnlTextboxes.Controls.Add(lineBreak); 
    } 

和:

TextBox t = (TextBox)pnlTextboxes.FindControl("textboxes"+f); 

UPDATE:

TextBox t = (TextBox)PlaceHolder1.FindControl("textboxes"+f); 
+0

我应该代替占位符,并将其添加到面板 – Tajkumar 2015-03-31 07:09:34

+0

如果你是使用占位符,然后在占位符内搜索它。查看更新的答案@ user3630591 – 2015-03-31 10:25:58

相关问题