基本上我想在代码后面创建一个用户控件,DataBind()它然后将控件插入当前页面
我正在尝试这个:
var comment = new IncidentHistoryGroupComment();
comment.LoadControl("~/Controls/IncidentHistoryGroupComment.ascx");
comment.LoadTemplate("~/Controls/IncidentHistoryGroupComment.ascx");
comment.InitializeAsUserControl(this);
comment.AttachmentActions = group.HastAttachmentActions ? group.AttachmentActions : null;
comment.Comment = group.Comment;
comment.NextStep = group.NextStep;
comment.IsInitiationStep = group.InitializationEntry != null;
comment.DataBind();
但是它内部的所有控件都是null。例如,我有一个id为pnlComments的窗格,当我尝试在IncidentHistoryGroupComment.DataBind()方法中访问它时,我得到null。我还检查了Controls属性,看看是否有什么东西,但Controls.Count == 0
所以问题是如何从后面的代码中正确初始化用户控件,以便将所有控件分配给IncidentHistoryGroupComment.designer.cs中的实例,以便我可以轻松访问它们。
答案 0 :(得分:2)
MyControl myControl = (MyControl)LoadControL("~/MyControl.ascx");
为了便于阅读,我更改了控件的名称。
答案 1 :(得分:1)
应该是这样的:
var comment = (IncidentHistoryGroupComment)Page.LoadControl("~/Controls/IncidentHistoryGroupComment.ascx");
然后你只需插入控制树
答案 2 :(得分:0)
我认为你的问题不是实例化用户控件。
在您的DataBind事件中,将此代码放在第一行:
this.EnsureChildControls();
它实例化所有子控件,如果它们没有被证实。我的意思是它检查子控件并在必要时调用createChildControl。