你好,我有一个带有构造器的用户控件
public Person(String Id, String Name)我想像这样加载这个UserControl:
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");这项工作如下:(new Person(Id,Name)) = new class inctance和.LoadControl("Person.ascx")再次创建一个新实例,这意味着第一行执行正确的实例,但被第二行覆盖
我不想要这个例子:
Control c = Page.LoadControl("/UserControl/webMenu.ascx");
webMenu a = (webMenu)c;
a.Title = "This is a Title";这不是我真正想要的!
发布于 2014-10-31 23:28:10
我认为带有重载(类型t,object[]参数)的LoadControl是一个大错误,没有任何意义
一种解决方案是使用额外的第三个重载,如: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验证类变量是否已设置,然后调用构造函数等特定函数。
我希望微软能为LoadControl实现第三次重载。我的意思是LoadControl(字符串路径)调用默认的空构造函数,为什么没有选项调用特定的构造函数?
我试着这样想:
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)中不为空;但在Controls.Add中,他执行了两次Page_load,一次是使用正确的构造函数,第二次是使用UserControlls null,第二次是使用带有现有UserControll的默认构造函数。
这样做的目的是用我想要的构造函数创建一个实例,并将UserControls添加到这个实例中,当我调用Controls.Add时,他会同时使用这两个东西,而不是一个接一个。
https://stackoverflow.com/questions/26661313
复制相似问题