我们正在尝试在当前项目(asp.net app)中使用MVP模式,并遇到了一些问题。该页面有多个部分,我们正在使用这些独立部分的用户控件。现在每个用户控件都有自己的视图和演示者,页面充当基本视图。现在的问题是如何将用户控制所需的数据传递给它?
根据当前设计,页面展示者将获得整个页面所需的数据。如何将这些数据传递给用户控件演示者?
我们正在考虑的其他方法是仅为用户控件创建视图,并使用页面展示器来处理所有事件。在这种情况下,我们将hv多个视图接口由每个用户控件视图实现。但页面主持人如何与所有不同的观点互动?
谢谢, JBN
答案 0 :(得分:1)
为什么用户控件有自己的视图和演示者?
我建议为页面设置一个视图和演示者,并通过页面视图与用户控件进行交互。如果您需要处理事件或将数据传入和传出用户控件,您可以将它们公开给页面,页面视图可以将它包装到演示者。包装可防止演示者直接与用户控件通信。
这是一些伪代码:
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);
}
}
我会读菲尔哈克的ASP.NET Supervising Controller (Model View Presenter) From Schematic To Unit Tests to Code
菲尔的文章中有很多关于网络表单的MVP信息。
答案 1 :(得分:0)
我能想到的解决方案之一
1-在顶级演示者处维护一个组合演示者列表,当您在顶级演示者处获得数据时,您可以通过从列表中选择正确的演示者来分发数据。
答案 2 :(得分:0)
不确定它是否完全适合MVP,但您可以从您的UC公开属性(View)并使用您页面中的数据进行更新。