C# 从用户控件调用父页上的方法

C# 从用户控件调用父页上的方法,c#,asp.net,user-controls,methods,C#,Asp.net,User Controls,Methods,我正在使用我创建的一个用户控件(只是一个.cs文件而不是.ascx文件),它具有一些魔力,并且根据控件生成的值,我需要它在“托管”控件的父页面上执行某些操作。在某些情况下,它需要调用一个方法(方法在父控件上) 控件放置在父页面上,如下所示: <customtag:MyControl ID="something" runat="server" /> 我在控件本身上动态创建按钮等,但是当单击按钮时,比如说控件上有一个文本框,如果文本框的值为“bob”它需要在包含控件的页面上调用一个

我正在使用我创建的一个用户控件(只是一个.cs文件而不是.ascx文件),它具有一些魔力,并且根据控件生成的值,我需要它在“托管”控件的父页面上执行某些操作。在某些情况下,它需要调用一个方法(方法在父控件上)

控件放置在父页面上,如下所示:

<customtag:MyControl ID="something" runat="server" />


我在控件本身上动态创建按钮等,但是当单击按钮时,比如说控件上有一个文本框,如果文本框的值为“bob”它需要在包含控件的页面上调用一个方法……我如何才能做到这一点?

您应该能够通过。但是,它将作为控件返回给您。您必须将其强制转换为页面类型,才能访问您定义的页面上的任何方法。

您可以按照casperOne的建议执行,但我不建议这样做。这是将用户控件与父页面紧密耦合,这与用户控件的目的背道而驰


就我个人而言,我会向用户控件添加一个事件(比如,
按钮单击
),父页面可以处理该事件。在父级的事件处理程序中,以您认为合适的方式处理事件。通过这种方式,您可以在以后将用户控件插入到不同的页面中,而不必担心用户控件中需要特定类型父页面的逻辑。

我认为casperOne的做法是正确的,但您需要更进一步。我假设这个用户控件将被更多的页面使用。(我通常写VB.Net,如果我的C#格式不正确,我很抱歉)

创建一个基本页面类(您可以将其存储在应用程序代码目录或项目中):

现在,请确保所有页面都从代码隐藏文件中的此页面继承:

public partial class _Default : PageToInheritFrom {

}
现在,在用户控件中,您知道了页面类型并可以调用

((PageToInheritFrom)this.Page).SpecialFunction();
((PageToInheritFrom)this.Page).SpecialFunction();