如何读取动态创建的文本框

时间:2009-07-10 15:30:45

标签: c# asp.net dynamic controls

我在占位符中创建了一些动态文本框和一个按钮,并希望在单击按钮但不确定如何从文本框中检索数据时在文本框中保存信息

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
}

4 个答案:

答案 0 :(得分: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,并在回发时重新创建任何动态创建的控件。

答案 1 :(得分:0)

您需要一些机制来显示Button和TextBox之间的关系。在winforms中,这很容易,每个控件都有一个Tag属性,可以包含对几乎任何东西的引用。 Web控件没有这样的属性(我知道),但是仍然很容易维护这种关系。一种方法是在页面中存储按钮/文本框关系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
}

答案 2 :(得分:0)

在文本框中添加“ID”

txtComment.ID = "txtComment"

从提交的表格中请求信息(如果您在页面上有表格)

comment = Request.Form("txtComment")

答案 3 :(得分:0)

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