如何从usercontrol调用aspx内容页面方法? ASP.NET,C#

问题描述:

如何从usercontrol调用aspx内容页面方法?如何从usercontrol调用aspx内容页面方法? ASP.NET,C#

在这一点上,您很可能会创建一个非常糟糕的设计。如果它需要访问其父项,则可能不应该是UserControl。你确定你不能只添加一个事件处理程序到你的用户控件,父页面调用某些事件?

也就是说,您的UserControl将拥有您可以投出的.Page属性来获取您的父页面。再次,这可能是一个非常糟糕的主意,你应该重新审视你的设计。

+0

好的。感谢您的建议 – Bendar 2010-06-14 21:25:18

也许最清洁的解决方案是,以提取包含必须从该用户控件被调用的方法的接口,然后从页传递的接口控制,例如:

public interface ISomeService 
{ 
    void Method1(); 
    bool Method2(); 
} 

public class MyContentPage : Page, ISomeService 
{ 
    void Method1() { ... } 
    bool Method2() { ... } 

    override OnLoad(...) 
    { 
    TheUserControl.SetService(this as ISomeService); 
    } 
} 

public class MyUserControl : UserControl 
{ 
    public void SetService(ISomeService service) 
    { 
    _service = service; 
    } 

    private void SomeOtherMethod() 
    { 
    _service.Method1(); 
    } 
} 

另一变型将很只需要包含用户控件的页面来实现所需的接口。这使得SetService()方法不需要:

public class MyUserControl : UserControl 
{ 
    private void SomeOtherMethod() 
    { 
    // page must implement ISomeService, throws an exception otherwise 
    (Page as ISomeService).Method1(); 
    } 
}