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

时间:2010-06-14 21:15:08

标签: c# asp.net

如何从usercontrol调用aspx内容页面方法?

2 个答案:

答案 0 :(得分:1)

最干净的解决方案可能是提取一个包含必须从UserControl调用的方法的接口,然后将该接口从页面传递给控件,​​例如:

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();
  }
}

答案 1 :(得分:0)

此时你最有可能创造一个非常糟糕的设计。如果它需要访问其父级,则可能不应该是UserControl。您确定不能只为父页调用某些事件的用户控件添加事件处理程序吗?

也就是说,您的UserControl将具有.Page属性,您可以强制转换为父页面。同样,这可能是一个非常糟糕的主意,你应该重新审视你的设计。