2012-08-10 112 views
0

获得的价值我已经创建了页面加载编程的文本框为使用下面的代码:无法从动态创建文本框

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文本框:

string id = TextBoxID1      
TextBox tb = (TextBox)dynamictable.FindControl(id);       
string valuetext = tb.Text; 
TextBox1.Text = valuetext; 

我得到的对象引用错误,我的意思是,我不能够找到控制和创建文本框。

我试图创建文本框,如下方法也:

TextBox tb = (TextBox)form1.FindControl(id);       
TextBox tb = (TextBox)this.form1.FindControl(id);       
TextBox tb = (TextBox)page.FindControl(id); 

任何帮助将是对我非常有帮助的。

+1

有这样的事情,你的时机问题,确保创建了控件并再次附上事件回发。也是它的cell1,这是文本框的父母不是你试过的任何东西 – 2012-08-10 06:10:49

回答

0

我想你可能需要找到该行然后找到该单元格,然后找到该文本框。

手段inpite这样做的:

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.. 

我希望这将有助于你

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; 
} 
+0

我还没有在代码隐藏中创建表,我已经静态地在aspx页面中创建表。我已经使用表名来添加代码隐藏行。 dynamictable是表名 – user1428019 2012-08-10 06:34:00

+0

原理相同,您仍然需要在回发中添加行。编辑后的代码......只需在后面的代码中声明表(或者它可能已经在您的设计器文件中) – 2012-08-10 06:45:13

0

为了与大家需要充分理解ASP.Net Page Life-cycle

动态控制需要每个帖子重新创建动态控制的工作,你的身后为你负责创建动态控件没有魔法,可悲的是你必须明确地创建它们。

请记住,一个页面只是一个类,当您执行请求时会创建该类,并在将响应发回给用户时被破坏。因此每次都需要重新创建控件。这是在页面上静态声明控件时完成的。但是对于动态控件,您需要在每个帖子上重新创建它们

@BobTodd提供的代码是一个很好的起点,但是Microsoft的建议是应该在Page_Init事件中创建动态控件以便同步它们事件与静态控件的其余部分。

所以,你的代码看起来像:

protected void Page_Init(object sender, EventArgs e) 
{ 
CreateTable(); 
} 

现在,请记住愚蠢的这个简单的规则,与动态控制工作时,总是使用相同ID。这非常重要,因为页面视图状态是根据控件的ID加载回来的。

要考虑的另一件事是,在Init事件中创建的所有控件都不会加载其视图状态,直到在页面上的每个控件上调用LoadViewState方法。这意味着如果您订阅了Page_PreLoadPage_Load事件,则可以安全地设置控件的属性,因为它们的值已经从视图状态加载,因此您的新值不会被覆盖。

这意味着在PreLoad事件之前分配给控件的任何属性将被替换为页面视图状态值。因此,在视图状态加载完成后设置动态控件属性是一种很好的做法。

为快速浏览,检查ASP.Net页面生命周期:

enter image description here

0

使用隐藏字段来存储动态创建的文本框的值在Java脚本

还添加runat="server"在隐藏的域名

并且您可以从隐藏的域名访问您的文本框值。

另一种方法是使用JavaScript来存储查询字符串值,然后从中读取在后端