2009-01-11 83 views
1

我在我的页面上有一个输入字段,用户将输入他们想要创建的文本输入的数量。按钮的操作是:动态创建文本输入(ASP.net/C#)

int num_flds = int.Parse(a_fld.Text); 
for (int i = 0; i < num_flds; i++) 
{ 
    TextBox tmp = new TextBox(); 
    tmp.ID = "answer_box" + i; 
    tmp.Width = Unit.Pixel(300); 
    answer_inputs.Controls.Add(tmp); 
} 

现在,我还有一个按钮,他们填写了所有的动态创建文本框之后,用户会点击。首先,问题是我在正确的位置动态创建文本框?我如何从动态创建的文本框中获取值? (动态创建的文本框被添加到面板的“answer_inputs”中

回答

2

我推荐阅读this和其他一些关于动态创建控件的文章,它并不像你想像的那么直截了当。有一些重要的页面生命周期要考虑的问题

2

在创建Web控件动态,我觉得最有控制自己的答案报告可以实现这样的:。

在你的页面类创建的东西存储值:

private readonly Dictionary<TextBox, string> values=new Dictionary<TextBox, string>(); 

做的方法来充当文本框的回调时,其价值的变化:

int num_flds; 
    if(!int.TryParse(a_fld.Text,out num_flds)) 
    { 
     num_flds = 0; 
    } 
    for (int i = 0; i < num_flds; i++) 
    { 
      TextBox tmp = new TextBox(); 
      tmp.ID = "answer_box" + i; 
      tmp.Width = Unit.Pixel(300); 
      answer_inputs.Controls.Add(tmp); 
      tmp.TextChanged += tmp_TextChanged; 
    } 

最后,你迭代:

void tmp_TextChanged(object sender, EventArgs e) 
    { 
     TextBox txt = sender as TextBox; 
     if(txt!=null) 
     { 
      values.Add(txt,txt.Text); 
     } 
    } 

然后为它们添加此方法添加到每个文本框通过回调字典查看它是否包含任何值。例如,在OnPreRender方法中执行此操作。

编辑:如果在回发中文本字段的数量减少,则存在问题。应该使用一些安全的方式来重新创建回发之前的文本字段。