如何从usercontrol调用aspx内容页面方法? ASP.NET,C#
答
在这一点上,您很可能会创建一个非常糟糕的设计。如果它需要访问其父项,则可能不应该是UserControl。你确定你不能只添加一个事件处理程序到你的用户控件,父页面调用某些事件?
也就是说,您的UserControl将拥有您可以投出的.Page属性来获取您的父页面。再次,这可能是一个非常糟糕的主意,你应该重新审视你的设计。
答
也许最清洁的解决方案是,以提取包含必须从该用户控件被调用的方法的接口,然后从页传递的接口控制,例如:
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();
}
}
好的。感谢您的建议 – Bendar 2010-06-14 21:25:18