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

时间:2010-05-03 16:01:03

标签: c# asp.net user-controls methods

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

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

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

我在控件本身上动态创建按钮等,但是当点击一个按钮时,让我们说控件上有一个文本框,如果文本框的值是“bob”,则需要调用一个方法在掌控控制权的页面上......我怎么能做到这一点?

3 个答案:

答案 0 :(得分:3)

可以做casperOne的建议,但我不建议。这会将您的用户控件与您的父页面紧密耦合,这会破坏用户控件的目的。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为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();