您好我有一个带构造函数的Usercontrol
public Person(String Id, String Name)
我想将此UserControl加载为isntance,如:
Control tmpControl = (Person)LoadControl(typeof(Person), new object[] { Id, Name});
.cs工作的实例,但usercontrol控件都为空。
如果我这样做:
Control tmpControl = (Person)LoadControl("Person.ascx");
我在实例中有控件,但他使用默认的空构造。
如何让booth获得正确的控件和类实例???
另一个尝试是:
Control tmpControll = (new Person(Id, Name)).LoadControl("Person.ascx");
这项工作如下: (新人(同名,姓名))=新阶层的感觉 和 .LoadControl(" Person.ascx")再次成为一个新的实例 这意味着第一行执行正确的实例但被secound部分覆盖
我不想要这个例子:
Control c = Page.LoadControl("/UserControl/webMenu.ascx");
webMenu a = (webMenu)c;
a.Title = "This is a Title";
这不是我想要的!!!!!!!!!!!
答案 0 :(得分:1)
我认为LoadControl带有重载(Type t,object []参数) 是一个很大的失败,毫无意义
一种解决方案是使用额外的第三次重载,例如: http://www.grumpydev.com/2009/01/05/passing-parameters-using-loadcontrol/
或使用此解决方案:
Control c = Page.LoadControl("/UserControl/webMenu.ascx");
webMenu a = (webMenu)c;
a.Title = "This is a Title";
并在Page_Load验证是否设置了类变量,而不是像构造函数那样调用特定的函数。
我希望Microsoft为LoadControl实现第三个重载工作。 我的意思是LoadControl(strin path)调用deafault空构造函数,为什么没有选项来调用特定的构造函数???
我试过想:
TemplateControl tmpControll = (Person)LoadControl("Person.ascx");
UserControl tmpControll2 = (Person)LoadControl(typeof(Person), new object[]{ID,Name});
tmpControll.Page.Controls.Add(tmpControll2);
//this not work correctly !!
这意味着创建一个实例并添加UserControls,在panel.Controls.Add(tmpControll);它们不是null。 但是在Controls.Add中,他执行了两次Page_load,一次使用正确的Constructor和UserControlls NULL,而Secound Page_load使用默认的Constructor,并且存在UserControll。
目的是使用我想要的构造函数创建一个实例,并将UserControls添加到此实例中,当我调用Controls.Add时,他将两个事物一起使用而不是一个接一个地使用。