ASP.NET MVP - 利用用户控件

时间:2008-12-03 22:39:20

标签: asp.net design-patterns mvp

我正在编写我的第一个应用程序,使用ASP.NET MVP(尝试监督控制器)和单元测试(迟到总比没有好!),我遇到了一个两难的境地。我写了3个用户控件,所有测试和界面,主持人。现在我来到一个采用这三个用户控件的页面,遇到了以下问题:

用户控件1是DateSelector,它是一个带有其他几个按钮/列表的Calendar控件。没什么好激动的。

用户控件2是DailyList。猜猜它是什么。无论如何,你可以选择/删除等..如果你从gridview中选择一个项目,它需要填充用户控件3。

用户控件3是ItemDetail。以下是DropDownLists,TextBoxes等...其中一些与其他人存在依赖关系(在DropDown中选择一个选项会影响DropDown 2中的选项)。

如果我从DateSelector中选择一个新日期,我是否从DateSelector Presenter中引发事件?我必须以某种方式让其他用户控件知道选择了一个新日期,以便他们可以重新绑定他们的数据,但是如何?如果我使用Page的Presenter订阅用户控件视图的演示者,我是不是会公然违反Demeter法则(通过他们的视图将演示者公开为属性)?我不能使用Page的Presenter作为页面的全知控制器吗?有什么我想念的吗?

到目前为止,我所阅读的所有内容都表示,“即使使用用户控件,MVP也很棒”,但在使用示例时,很容易忘记用户控件的使用。在我看来,MVC将更加贴近我对此的思考模式,但目前,MVC不是一种选择。任何帮助都会很棒。提前谢谢。

1 个答案:

答案 0 :(得分:4)

Page Presenter必须是协调页面上控件之间交互的人。还有谁会这样做?我有页面演示者监听DateSelector用户控件的事件。从页面展示者的角度来看,它可能不需要知道是谁引发了事件(视图或演示者),因为它将DateSelector视为完全封装的控件。内部工作应该从页面的演示者隐藏。

它只知道DateSelector用户控件引发了一个事件,现在它需要通过引发自己的事件或者通过显式调用presenter上的方法来通知页面上的其他控件。