[英]Not able to get the value from dynamically created textbox
我使用以下代码在页面加载中以编程方式创建了一个文本框:
HtmlTableRow row = new HtmlTableRow();
HtmlTableCell cell1 = new HtmlTableCell();
HtmlTableCell cell2 = new HtmlTableCell();
cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
cell2.Controls.Add(new TextBox() { ID = TextBoxID1 });
row.Cells.Add(cell1);
row.Cells.Add(cell2);
dynamictable.Rows.Add(row);
在按钮单击事件中,我试图从文本框中获取值并将该值分配给静态创建的anohter TextBox,如下所示:
string id = TextBoxID1
TextBox tb = (TextBox)dynamictable.FindControl(id);
string valuetext = tb.Text;
TextBox1.Text = valuetext;
正在收到“对象引用错误”,我是说,我无法找到控件并创建TextBox。
我也尝试创建TextBox如下方法:
TextBox tb = (TextBox)form1.FindControl(id);
TextBox tb = (TextBox)this.form1.FindControl(id);
TextBox tb = (TextBox)page.FindControl(id);
任何帮助都会对我有很大帮助。
我认为您可能需要先找到行,然后再找到单元格,然后找到文本框。
意味着尽管这样做:
TextBox tb = (TextBox)dynamictable.FindControl(id);
您需要先找到特定的行
// find by it or index etc
HtmlTableRow tb = (HtmlTableRow)dynamictable.FindControl(id);
// Then find the Table cell and then find textbox..
我希望这能帮到您
您可能有一个创建表的方法,您需要在回发时调用它以确保一切都已设置。
protected HtmlTable dynamictable;
protected TextBox tb = new TextBox();
protected override void OnInit(EventArgs args)
{
base.OnInit(args);
CreateTableRows();
}
private void CreateTableRows()
{
HtmlTableRow row = new HtmlTableRow();
HtmlTableCell cell1 = new HtmlTableCell();
HtmlTableCell cell2 = new HtmlTableCell();
cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
cell2.Controls.Add(tb });
row.Cells.Add(cell1);
row.Cells.Add(cell2);
dynamictable.Rows.Add(row);
}
protected void OnClick(object sender, EventArgs args)
{
return tb.Text;
}
为了使用动态控件,您需要完全了解ASP.Net页面生命周期
需要在每个帖子上重新创建动态控件,为您创建动态控件没有背后的魔力,可悲的是您必须显式地创建它们。
请记住,页面只是在执行请求时创建的类,而在将响应发送回用户时销毁的页面 。 因此,需要每次重新创建控件。 当控件在页面上静态声明时,将为您完成此操作。 但是对于动态控件,您需要在每个帖子上重新创建它们
@BobTodd提供的代码是一个很好的起点,但是Microsoft的建议是应在Page_Init
事件中创建动态控件,以便将其事件与其余静态控件同步。
因此您的代码如下所示:
protected void Page_Init(object sender, EventArgs e)
{
CreateTable();
}
现在,请记住这个简单的哑巴规则,当使用动态控件时,请始终使用相同的ID 。 这真的很重要,因为页面视图状态是根据控件的ID重新加载的。
要考虑的另一件事是,在页面上的每个控件上调用LoadViewState
方法之前,在Init
事件中创建的所有控件都不会加载其视图状态。 这意味着,如果您预订Page_PreLoad
或Page_Load
事件,则可以安全地设置控件的属性,因为它们的值已经从viewstate中加载,因此您的新值将不会被覆盖。
这意味着在PreLoad
事件之前分配给控件的任何属性都将被页面viewstate值替换 。 因此,在加载视图状态后设置动态控件属性被认为是一种好习惯。
快速查看一下ASP.Net页面的生命周期:
使用隐藏字段在Java脚本中存储动态创建的文本框的值
还添加runat="server"
中隐藏费尔德
您可以从隐藏的字段访问您的文本框值。
另一种方法是使用javascript将值存储在查询字符串中,然后在后端读取该值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.