【问题标题】:Calling a method in parent page from dynamically generated user control从动态生成的用户控件调用父页面中的方法
【发布时间】:2013-03-02 06:47:32
【问题描述】:

我有一个类似于Calling a method in parent page from user control 的问题,除了我的用户控件是在页面创建时动态生成的。

我在上面的答案中尝试了首选的解决方案,但是由于我事先不知道页面上需要多少个控件副本,所以我无法订阅 Page_Load 上的事件。

这个应用程序的逻辑需要大修,但它超出了我当前项目的范围。 我目前已经实现了不太受欢迎的((MyPageName)this.Page).CustomMethod();,但如果可以的话,我希望以“正确”的方式来实现。

你有什么建议吗?

编辑:控件的代码位于与页面分开的页面中。 (我打算在项目的其他地方重用它。)这意味着控件不知道页面上有哪些处理程序可用。

【问题讨论】:

  • 我不知道您当前的实现是“错误”的方式。
  • 不能每次创建控件的新实例时都订阅事件吗?你在哪里动态创建它?
  • 请添加显示您如何动态创建用户控件的代码,以便我们为您提供帮助。
  • @AndrewShepherd:这是“错误”的方式,因为它强制用户控件了解页面的方法。

标签: c# asp.net


【解决方案1】:

提供的链接中的示例与您的方案之间的唯一区别最终是控件变量实例范围的上下文。也就是说,在他们的情况下,使用在其声明中指定的ID 访问控件(例如,在标记中),只有一个始终存在的单一控件。

但是,在您的情况下,您将调用控件的实例,并且可以直接、立即访问该实例;这意味着,就像示例一样,您可以这样做:

// alread doing this to dynamically generate, no doubt
var control = new MyControl(); 
// then subscribe to the event of this instance...
control.MyEvent += MyEventHandler;

【讨论】:

  • 我忘了说我也试过了。我编辑了我的问题以显示控件和页面不在同一个类中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多