为什么用户控件有自己的视图和演示者?
我建议为页面设置一个视图和演示者,并通过页面视图与用户控件进行交互。如果您需要处理事件或将数据传入和传出用户控件,您可以将它们公开给页面,并且页面视图可以为演示者包装它。包装防止演示者直接与用户控件通信。
这是一些伪代码:
IFooPageView
{
string SomeData {get; set;}
event EventHandler SomeEvent;
}
public class FooPageView : IFooPageView
{
public event EventHandler SomeEvent;
public SomeData
{
get { return myUserControl.SomeData;}
set { myUserControl.SomeData = value;}
}
protected override void OnInitComplete(EventArgs e)
{
//handle the user control event
this.myUserControl.SomeEvent += SomeEvent_EventHandler;
}
private void SomeEvent_EventHandler(object sender, EventArgs e)
{
//Raise the user control event to the presenter
if (SomeEvent!= null)
SomeEvent(this, EventArgs.Empty);
}
}
我会阅读 Phil Haack 的ASP.NET Supervising Controller (Model View Presenter) 从原理图到单元测试到代码
Phil 的文章中有很多关于 Web 表单的 MVP 信息。