2009-01-11 125 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方法中執行此操作。

編輯:如果在回發中文本字段的數量減少,則存在問題。應該使用一些安全的方式來重新創建回發之前的文本字段。