【问题标题】:Asp.NET MVC is MVC or MVP?Asp.NET MVC 是 MVC 还是 MVP?
【发布时间】:2012-05-03 04:03:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 这是一个相当广泛的问题。你确定它只有一个正确答案吗?

标签: c# asp.net .net asp.net-mvc design-patterns


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多