MVP模式 - 设计问题

时间:2010-12-28 17:17:01

标签: asp.net mvp webformsmvp

我们正在尝试在当前项目(asp.net app)中使用MVP模式,并遇到了一些问题。该页面有多个部分,我们正在使用这些独立部分的用户控件。现在每个用户控件都有自己的视图和演示者,页面充当基本视图。现在的问题是如何将用户控制所需的数据传递给它?

根据当前设计,页面展示者将获得整个页面所需的数据。如何将这些数据传递给用户控件演示者?

我们正在考虑的其他方法是仅为用户控件创建视图,并使用页面展示器来处理所有事件。在这种情况下,我们将hv多个视图接口由每个用户控件视图实现。但页面主持人如何与所有不同的观点互动?

谢谢, JBN

3 个答案:

答案 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)并使用您页面中的数据进行更新。