2009-07-10 55 views
0

我创造了一些动态文本框的和按钮的占位符和想保存在文本框的信息被点击按钮时,但不知道如何从文本检索数据我怎么能读一个动态创建文本框

LiteralControl spacediv3 = new LiteralControl("&nbsp&nbsp"); 
Label lblComText = new Label(); 
lblComTitle.Text = "Comment"; 
TextBox txtComment = new TextBox(); 
txtComment.Width = 200; 
txtComment.TextMode = TextBoxMode.MultiLine; 
phBlog.Controls.Add(lblComText); 
phBlog.Controls.Add(spacediv3); 
phBlog.Controls.Add(txtComment); 

Button btnCommentSave = new Button(); 
btnCommentSave.ID = "mySavebtnComments" ; 
btnCommentSave.Text = "Save "; 
phBlog.Controls.Add(btnCommentSave); 
btnCommentSave.CommandArgument = row["ID"].ToString(); 
btnCommentSave.Command += new CommandEventHandler(btnSave_Click); 

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text 
} 

回答

1

你需要去在btnSave_Click你控制的参考。例如:

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    var btn = (Button)sender; 
    var container = btn.NamingContainer; 
    var txtBox = (TextBox)container.FindControl("txtComment"); 
    firstelement.InnerText = txtBox.text // this gives error on txtComment.text 
} 

您还需要在txtComment上设置ID并在回发时重新创建任何动态创建的控件。

0

您将需要一些机制来显然在Button和TextBox之间创建关系。在winforms中,这很容易,每个控件都有一个Tag属性,它可以包含几乎任何东西的引用。网络控制没有这样的属性(我知道),但维护这种关系仍然很容易。一种方法是在页面Dictionary存储按钮/文本框关系:

private Dictionary<Button, TextBox> _buttonTextBoxRelations = new Dictionary<Button, TextBox>(); 

当您创建按钮和文本框控件,可以插入他们在词典:

TextBox txtComment = new TextBox(); 
// ... 

Button btnCommentSave = new Button(); 
// ... 
_buttonTextBoxRelations.Add(btnCommentSave, txtComment); 

...和然后你可以看一下文本框按钮的单击事件:

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    TextBox commentTextBox = _buttonTextBoxRelations[(Button)sender]; 
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text 
} 
0

回传过程中添加的“ID”的文本框

txtComment.ID = "txtComment" 

请求从提交的表单中的信息(前提是你有在页面上的表单)

comment = Request.Form("txtComment") 
0

尝试加载txtComment(在调用base.LoadViewState后,在重载的LoadViewState方法中使用相同的ID)。在这种情况下,您在处理回发数据并加载txtComment控件之前加载它。