0

我在一个新客户那里,他们实现了 mvp 模式。

现在我想使用它,但我在他们的代码中找不到的是:我在查询字符串中打开一个带有 id 的 asp 表单。我得到了具有该 id 的数据对象,现在我有了一个我想在 asp.net 表单的文本框中显示的对象。

我有这个:

我创建了一个演示者

演示者有一个构造函数,它采用 IxxxView

aspx 页面实现了 IxxxView

在 aspx 中,我引用了演示者

在加载 aspx 时,我用 (this) 实例化演示者

我将对象的 id 传递给演示者,演示者获取数据...

(到目前为止,一切都很好?)

然后,我在演示者中有一个对象,在视图中有一个文本框。

我应该知道什么?

4

1 回答 1

0

在一个相当典型的 MVP 实现中,我希望 IView 接口将指定事件。演示者在获得对 IView 的引用(在您的情况下,这将在演示者的构造函数中)时,应该为它想要处理的任何事件附加事件处理程序。很多时候,其中一个事件是向演示者发出信号,表明数据应该放入视图中,或者放入视图模型中以供视图绑定。有时,该事件会表明演示者应该采取某种行动,例如更新模型或启动流程。

在 WebFormsMvp 中,在演示者将数据加载到视图的视图模型(通过设置 View.Model 属性)后,视图可以使用绑定语法绑定到视图模型。例如,您的文本框控件可能如下所示:

<asp:textbox runat="server" DataSource="<%# Model.Data %>" />

如果您没有使用 WebFormsMvp,那么您只想确保 Presenter 有办法将数据传递到视图中。您可以通过向用户控件实现的 IView 添加一个属性来执行此操作。当调用属性的设置器时,它需要将值传递给适当的控件。同样,当调用该属性的 getter 时,它应该返回该控件的值。

例如,您的用户控件可以包括这样的属性实现:

string IMyView.ViewData
{
    get { return TextBox1.Text; }
    set { TextBox1.Text = value; }
}

但是,如果您想变得花哨,您也可以使用 DataSource 控件。要记住的主要事情是,如果您采用 MVP,则希望 View 部分尽可能简单,因为 View 比 Presenter 更难测试。所以视图应该尽可能少地做——设置值、获取值和触发事件,以及其他很少的事情。动态视图行为,如隐藏或显示元素、突出显示或不突出显示等,应由 Presenter 使用 IView 接口的属性或通过 Presenter 和 View 共享的 ViewModel 控制。

就个人而言,我更喜欢并推荐使用 WebFormsMvp。

于 2011-12-14T19:54:25.760 回答