2012-04-22 60 views
2

正如我一直在閱讀這篇文章:http://www.codeproject.com/Articles/42830/Model-View-Controller-Model-View-Presenter-and-Mod,MVC是這樣解釋的:Asp.NET MVC是MVC還是MVP?

View-Model-Controller UML Diagram

在此圖中,視圖模型是觀察者模式,其中在模型的任何更改通知視圖的Update方法更新視圖狀態並將其當前狀態傳遞給這些視圖。

視圖和控制器之間的關係在戰略模式中定義,其中視圖獲取具體控制器並根據策略模式定義的控制器運行算法。

因此,控制器更新模型和模型會通知視圖來更新其狀態。

但是,出於某種原因,我無法想像Asp.Net MVC的相同邏輯,因爲控制器可以訪問模型並將這些模型傳遞給視圖,但視圖使用模型直接獲取它們的屬性等來更新它們的狀態,但我無法在Asp.Net MVC中的視圖和模型之間適合觀察者模式。

有人請解釋一下我錯過了什麼嗎?

+0

這是一個相當廣泛的問題。你確定它只有一個正確的答案嗎? – 2012-04-22 05:06:01

回答

5

ASP.NET MVC支持Web的無狀態特性,因此一旦呈現視圖,控制器無法知道模型對象實例的更改。

這與Silverlight或WPF等有狀態平臺不同。它們是有狀態的事實允許控制器(或者如果您使用MVVM,則使用ViewModel)觀察UI上發生了什麼,更改模型對象,然後相應地更新自己。

在ASP.NET MVC中,當數據從控制器傳遞到視圖時,這是單向旅程。沒有等效的View.Update()方法;該視圖會呈現一次,然後就是這樣了。按照Controller.AlgorithmInterface的說法,視圖也無法回叫控制器。您可以通過AJAX回調來實現類似的效果,但是您必須使用一些幕後的魔法才能使用狀態數據重新填充控制器(例如,通過將對象ID從視圖傳遞迴控制器)。

相關問題