我總是聽到並讀到ASP.NET MVC4中的交互流是Controller - > Model - > View。ASP.NET MVC4 - 什麼是實際的數據流?
但說這個流程實際上是Http Get上的流程,並且Http Post上的流程是View - > Controller - > Model - > Controller - > View(相同或不同 - 沒關係)?
我總是聽到並讀到ASP.NET MVC4中的交互流是Controller - > Model - > View。ASP.NET MVC4 - 什麼是實際的數據流?
但說這個流程實際上是Http Get上的流程,並且Http Post上的流程是View - > Controller - > Model - > Controller - > View(相同或不同 - 沒關係)?
這取決於你是什麼歸類爲 「查看」。在POST的情況下,根本沒有服務器端視圖代碼,只是瀏覽器端代碼。在響應流程中,將會在服務器上將某些視圖呈現轉換爲HTML格式(可能是POST)。這就是我說大多數人在談論ASP.NET MVC流程時所指的。
喬希,thx花時間。我想我明白你的意思。讓我看看我是否可以用一個例子重新說出你所說的話。假設「提交」按鈕不被視爲與控制器交互的視圖(瀏覽器端代碼),該部分被跳過。只有當請求發送到服務器時,它現在纔算作控制器,接受請求,做它需要做的事情,並將其他視圖返回給用戶。這幾乎是你的意思? –
是的,這就是我的意思。 –
否。該視圖是呈現(僅適用於HTTP響應併發送到客戶端)的僅輸出介質;它不會直接接收或發送給服務器的任何數據。
對於任何HTTP請求,「Http Get」的示意圖都適用,無論動詞如何。首先,請求進入服務器,路由引擎決定將它發送到哪裏 - 這很可能是一個Controller。然後控制器開始生效,必要時調用模型活頁夾。這是發生在幕後的魔術的原因,您可以使用控制器方法ActionResult Foo(MyComplexModel model)
,並將請求數據中的值分配給參數,並執行驗證。接下來是控制器中的代碼,它很可能會調用View,並將其呈現給響應流。
不,圖的POST與GET相同。 當您發佈表單時,您正在發佈víaAjax,您將發佈針對Controller的操作。
其實你發佈到控制器操作ViewModel的視圖。我認爲這是圖的想法... –
@Bart - no。您不發佈視圖模型,發佈名稱 - 值對(如果使用標準數據格式)或可能的數據blob(對於文件或json數據)的集合。這些可能會映射到視圖模型,或者它可能不......但實際上並沒有發佈實際的ViewModel本身。 –
你是對的!弄糊塗了。 –
混和使用MVC HTTP流量,我想你可以枚舉這種方式:
HTTP GET請求控制器驗證輸入(線路,參數等)
型號做「應用邏輯「就像做一些算法一樣,調用 Db等。可能需要像ViewModels那樣的'數據調整'(ViewModel 可能是負責建模視圖)
控制器選擇一個特定的視圖和ViewModel。
視圖呈現並顯示給用戶。客戶端又名查看邏輯 可以在視圖中發生,如驗證表單或執行更多請求。 (爲簡單起見,我離開了這一點流)
比方說,我填表,並從視圖提交
HTTP POST請求的一些數據。
控制器驗證數據,模型做的業務邏輯和控制器 重定向到HTTP GET(重新開始)
總之,你最終服務於獲取動詞意見,提交給控制器的修改上Post動詞和模型做任何事但輸入驗證和流量控制,並最終重定向到另一個Get動詞。
這隻有在您使用PRG模式時才真正被推薦爲最佳實踐。
這對你有意義嗎?
爲什麼-1?我真的很感激評論。 –
有點不相干,但不要忘記'Post/Redirect/Get'模式以安全地處理POST:http://www.stevefenton.co.uk/Content/Blog/Date/201104/博客/ ASP-NET-MVC-Post-Redirect-Get-Pattern/ –