首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LoadControl方法传递参数

使用LoadControl方法传递参数
EN

Stack Overflow用户
提问于 2014-10-31 03:05:26
回答 1查看 2.1K关注 0票数 1

你好,我有一个带有构造器的用户控件

代码语言:javascript
复制
public Person(String Id, String Name)

我想像这样加载这个UserControl:

代码语言:javascript
复制
Control tmpControl = (Person)LoadControl(typeof(Person), new object[] { Id, Name});

.cs的实例可以工作,但是usercontrol控件都为空。

如果我这样做了:

代码语言:javascript
复制
Control tmpControl = (Person)LoadControl("Person.ascx");

我在实例中有控件,但他使用默认的空构造函数。

如何获得booth正确的控件和类实例?

另一种尝试是:

代码语言:javascript
复制
Control tmpControll = (new Person(Id, Name)).LoadControl("Person.ascx");

这项工作如下:(new Person(Id,Name)) = new class inctance和.LoadControl("Person.ascx")再次创建一个新实例,这意味着第一行执行正确的实例,但被第二行覆盖

我不想要这个例子:

代码语言:javascript
复制
Control c = Page.LoadControl("/UserControl/webMenu.ascx");
webMenu a = (webMenu)c;
a.Title = "This is a Title";

这不是我真正想要的!

EN

回答 1

Stack Overflow用户

发布于 2014-10-31 23:28:10

我认为带有重载(类型t,object[]参数)的LoadControl是一个大错误,没有任何意义

一种解决方案是使用额外的第三个重载,如:http://www.grumpydev.com/2009/01/05/passing-parameters-using-loadcontrol/

或者使用这个解决方案:

代码语言:javascript
复制
Control c = Page.LoadControl("/UserControl/webMenu.ascx");
webMenu a = (webMenu)c;
a.Title = "This is a Title";

并在Page_Load验证类变量是否已设置,然后调用构造函数等特定函数。

我希望微软能为LoadControl实现第三次重载。我的意思是LoadControl(字符串路径)调用默认的空构造函数,为什么没有选项调用特定的构造函数?

我试着这样想:

代码语言:javascript
复制
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时,他会同时使用这两个东西,而不是一个接一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26661313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档