3

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

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

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

谢谢,jbn

4

3 回答 3

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);
    }
}

我会阅读 Phil Haack 的ASP.NET Supervising Controller (Model View Presenter) 从原理图到单元测试到代码

Phil 的文章中有很多关于 Web 表单的 MVP 信息。

于 2010-12-28T17:56:15.313 回答
0

我能想到的解决方案之一

1-在顶级演示者中维护一个组合演示者列表,当您在顶级演示者中获取数据时,您可以通过从列表中选择合适的演示者来分​​发数据。

于 2010-12-28T17:22:50.893 回答
0

不确定它是否完全符合 MVP,但您可以从您的 UC 中公开一个属性(视图)并使用页面中的数据对其进行更新。

于 2010-12-28T17:29:35.583 回答