【问题标题】:calling a method on the parent page from a user control从用户控件调用父页面上的方法
【发布时间】:2010-05-03 16:01:03
【问题描述】:
我正在使用我创建的用户控件(只是一个 .cs 文件而不是 .ascx 文件),它具有一些魔力,并且取决于控件生成的值,我需要它在父页面上执行某些操作正在“托管”控件。它需要在某些情况下调用方法(方法在父控件上)。
控件放置在父页面上,如下所示:
<customtag:MyControl ID="something" runat="server" />
我在控件本身上动态创建按钮等,但是当单击按钮时,假设控件上有一个文本框,如果文本框的值为“bob”,则需要调用一个方法在包含控件的页面上...我怎样才能做到这一点?
【问题讨论】:
标签:
c#
asp.net
user-controls
methods
【解决方案1】:
您可以按照 casperOne 的建议进行操作,但我不建议这样做。这将您的用户控件与您的父页面紧密耦合,这违背了用户控件的目的。
就个人而言,我会向父页面可以处理的用户控件(例如ButtonClicked)添加一个事件。在您父母的事件处理程序中,以您认为合适的方式处理事件。这样,您可以在以后将用户控件插入不同的页面,而不必担心用户控件中的逻辑需要特定类型的父页面。
【解决方案2】:
您应该能够通过Parent property 获取托管控件的页面。但是,这将作为控件返回给您。您必须将其转换为您的页面类型才能访问您定义的页面上的任何方法。
【解决方案3】:
我认为 casperOne 是在正确的轨道上,但你需要更进一步。我要假设这个用户控件将在页面上更多地使用。 (我通常写 VB.Net,如果我的 C# 格式错误,请见谅)
制作一个基页类(您可以将其存储在您的 App_Code 目录或项目中):
public class PageToInheritFrom : System.Web.UI.Page {
public void SpecialFunction() {
}
}
现在请确保您的所有页面都在您的代码隐藏文件中继承自该页面:
public partial class _Default : PageToInheritFrom {
}
现在在您的用户控件中,您知道页面类型是什么并且可以调用
((PageToInheritFrom)this.Page).SpecialFunction();