我使用以下代码在页面加载中以编程方式创建了一个文本框:
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);
任何帮助对我都非常有帮助。
答案 0 :(得分:0)
我认为你可能需要找到行然后找到单元格,然后找到文本框。
意味着这样做:
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..
我希望这会对你有所帮助
答案 1 :(得分:0)
您可能有一个创建表的方法,您需要在回发时调用它以确保一切都已设置。
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;
}
答案 2 :(得分:0)
要使用动态控件,您需要完全理解ASP.Net Page Life-cycle
需要在每个帖子上重新创建动态控件 ,为您创建动态控件的责任毫无魔力,遗憾的是您必须明确创建它们。
请记住,页面只是一个类,它是在您执行请求时创建的,并在响应发送回用户时销毁。因此,每次都需要重新创建控件。当在页面上静态声明控件时,这样就完成了。但是使用动态控件,您需要在每个帖子上重新创建它们
@BobTodd提供的代码是一个很好的起点,但Microsoft的建议是应该在Page_Init
事件中创建动态控件,以便将它们的事件与其他静态控件同步。 / p>
所以你的代码看起来像是:
protected void Page_Init(object sender, EventArgs e)
{
CreateTable();
}
现在,请记住这个简单的哑巴规则,在使用动态控件时,请始终使用相同的 ID 。这非常重要,因为页面视图状态是根据控件的ID加载回来的。
要考虑的另一件事是,在Init
事件中创建的所有控件都不会加载其视图状态,直到在页面上的每个控件上调用LoadViewState
方法。这意味着,如果您订阅了Page_PreLoad
或Page_Load
事件,则可以安全地设置控件的属性,因为它们的值已经从视图状态加载,因此不会覆盖您的新值。
这意味着在PreLoad
事件之前分配给控件的任何属性都将被替换为页面视图状态值。因此,在加载viewstate之后设置动态控件属性是一种很好的做法。
作为快速浏览,请查看ASP.Net页面生命周期:
答案 3 :(得分:0)
使用隐藏字段存储java脚本中动态创建的文本框的值
还在隐藏的费用中添加runat="server"
您可以从隐藏的feild访问您的文本框值。
另一种方法是使用javascript将该值存储在查询字符串中,然后在后端从中读取