使用LoadControl方法传递参数

时间:2014-10-30 19:05:26

标签: c# parameter-passing webusercontrol

您好我有一个带构造函数的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";

这不是我想要的!!!!!!!!!!!

1 个答案:

答案 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时,他将两个事物一起使用而不是一个接一个地使用。