2

正如我一直在阅读这篇文章:http ://www.codeproject.com/Articles/42830/Model-View-Controller-Model-View-Presenter-and-Mod,MVC是这样解释的:

视图-模型-控制器 UML 图

在此图中,View-Model 是观察者模式,其中 Model 的任何更改都会通知 View 的Update方法来更新 View 的状态并将其当前状态传递给这些 View。

视图和控制器之间的关系在策略模式中定义,其中视图获得具体的控制器并在控制器中运行由策略模式定义的算法。

所以控制器更新模型和模型通知视图更新它们的状态。

但是,由于某种原因,我无法将 Asp.Net MVC 的相同逻辑可视化,因为控制器可以访问模型并将这些模型传递给视图,但视图直接使用模型来获取它们的属性等来更新它们的状态,但我不能适合 Asp.Net MVC 中视图和模型之间的观察者模式。

有人可以解释一下我错过了什么吗?

4

1 回答 1

5

ASP.NET MVC 支持 Web 的无状态特性,因此一旦呈现视图,控制器就无法知道模型对象实例的更改。

这与 Silverlight 或 WPF 等有状态平台不同。它们是有状态的这一事实允许控制器(或者如果您使用 MVVM,则为 ViewModel)观察 UI 上发生的事情,对模型对象进行更改,然后相应地更新视图本身。

在 ASP.NET MVC 中,当数据从控制器传递到视图时,这是一次单向旅行。没有与 View.Update() 方法等效的方法;视图被渲染一次,然后就是这样。根据 Controller.AlgorithmInterface,视图也无法回调控制器。您可以使用 AJAX 回调实现类似的功能,但是您必须使用一些幕后魔术来使用状态数据重新填充控制器(例如,通过将对象 ID 从视图传递回控制器)。

于 2012-04-22T05:10:11.250 回答