c# - Asp.NET MVC 是 MVC 还是 MVP?

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

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

View-Model-Controller UML Diagram

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

View 和 Controller 之间的关系在策略模式中定义,其中 View 获取具体 Controller 并按照策略模式定义在 Controller 中运行算法。

因此 Controller 更新模型,模型通知 View 更新其状态。

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

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

最佳答案

ASP.NET MVC 维护 Web 的无状态性质,因此一旦呈现 View , Controller 就无法了解模型对象实例的更改。

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

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

关于c# - Asp.NET MVC 是 MVC 还是 MVP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265378/

相关文章:

c# - 如何在grid中找到textbox的控件

c# - 在 ASP.NET 中显示谁在线

C# 按两个日期对列表进行排序

c# htmlDecode 实体数大于 127

c# - 在网格中绑定(bind) session 数据

asp.net - MVC3数据缓存技术

c# - 在 C# 控制台应用程序中检查的 Delphi 应用程序中打开的互斥量

c# - 是否可以以编程方式处理 'clean' 电子邮件?

远程连接到 SQL Server 2005 实例时出现 C# 异常

c# - 不支持带有 Autofac 的 Net Core 3.0 抛出 IServiceProvider