如何从usercontrol调用aspx内容页面方法?
答案 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属性,您可以强制转换为父页面。同样,这可能是一个非常糟糕的主意,你应该重新审视你的设计。