我的用户控件有问题。在里面,我有一个复选框控件。我想动态创建该用户控件并将其插入到asp:table控件中。
MyControl pp = new MyControl();
pp.pageNameCb.Text = "lorem";
TableCell tc = new TableCell();
tc.Controls.Add(pp);
table.Rows[0].Cells.Add(tc);
但是,pageNameCb
为空,即使我手动创建它的实例,我的表中也没有显示任何内容。为什么?
这是我的代码:
<asp:View ID="new_role_view" runat="server">
<asp:Table ID="table1" runat="server">
<asp:TableRow ID="TableRow1" runat="server">
<asp:TableCell ID="TableCell1" runat="server">
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:View>
然后,如果我改变该视图是活动的,我创建我的控件:
MyControl pp = new MyControl();
table.Rows[0].Cells[0].Controls.Add(pp);
MyControl的Page_Init:
protected void Page_Init(object sender, EventArgs e)
{
if (pageNameCb == null)
pageNameCb = new CheckBox();
pageNameCb.Text = "works";
}
仍然没有显示
答案 0 :(得分:0)
当您创建用户控件时,您是否同时实例化该复选框?除非在某个时刻创建了复选框,否则它将为null。如果它是一个自定义控件,你将在Control.CreateChildControls中创建 - 因为它是构造函数中的用户控件或自定义方法 - Init()或某些。
此外,我将在Page_Init上创建用户控件,然后添加到控件树,否则它将不会参与页面的ViewState。
答案 1 :(得分:0)
如果根据ASP.net Page Cycle
很好地创建了用户控件,那么这个代码应该可以正常工作。
ID
。
private Table CreateHtmlTable()
{
Table table = new Table();
table.Rows.Add(new TableRow());
TableCell tc = new TableCell();
MyControl pp = new MyControl();
pp.ID = "SomeID";
pp.pageNameCb.Text = "lorem";
tc.Controls.Add(pp);
table.Rows[0].Cells.Add(tc);
return table;
}
这是适合我的代码...
ASPxLabel lbl = new ASPxLabel(); lbl.ID = "lblTopicName"; lbl.Text = "TopicName"; table.Rows[0].Cells[0].Controls.Add(lbl);