2013-08-23 45 views
0

我總是聽到並讀到ASP.NET MVC4中的交互流是Controller - > Model - > View。ASP.NET MVC4 - 什麼是實際的數據流?

但說這個流程實際上是Http Get上的流程,並且Http Post上的流程是View - > Controller - > Model - > Controller - > View(相同或不同 - 沒關係)?

HttpGet flow

enter image description here

+0

有點不相干,但不要忘記'Post/Redirect/Get'模式以安全地處理POST:http://www.stevefenton.co.uk/Content/Blog/Date/201104/博客/ ASP-NET-MVC-Post-Redirect-Get-Pattern/ –

回答

1

這取決於你是什麼歸類爲 「查看」。在POST的情況下,根本沒有服務器端視圖代碼,只是瀏覽器端代碼。在響應流程中,將會在服務器上將某些視圖呈現轉換爲HTML格式(可能是POST)。這就是我說大多數人在談論ASP.NET MVC流程時所指的。

+0

喬希,thx花時間。我想我明白你的意思。讓我看看我是否可以用一個例子重新說出你所說的話。假設「提交」按鈕不被視爲與控制器交互的視圖(瀏覽器端代碼),該部分被跳過。只有當請求發送到服務器時,它現在纔算作控制器,接受請求,做它需要做的事情,並將其他視圖返回給用戶。這幾乎是你的意思? –

+0

是的,這就是我的意思。 –

0

否。該視圖是呈現(僅適用於HTTP響應併發送到客戶端)的僅輸出介質;它不會直接接收或發送給服務器的任何數據。

對於任何HTTP請求,「Http Get」的示意圖都適用,無論動詞如何。首先,請求進入服務器,路由引擎決定將它發送到哪裏 - 這很可能是一個Controller。然後控制器開始生效,必要時調用模型活頁夾。這是發生在幕後的魔術的原因,您可以使用控制器方法ActionResult Foo(MyComplexModel model),並將請求數據中的值分配給參數,並執行驗證。接下來是控制器中的代碼,它很可能會調用View,並將其呈現給響應流。

0

不,圖的POST與GET相同。 當您發佈表單時,您正在發佈víaAjax,您將發佈針對Controller的操作。

+0

其實你發佈到控制器操作ViewModel的視圖。我認爲這是圖的想法... –

+1

@Bart - no。您不發佈視圖模型,發佈名稱 - 值對(如果使用標準數據格式)或可能的數據blob(對於文件或json數據)的集合。這些可能會映射到視圖模型,或者它可能不......但實際上並沒有發佈實際的ViewModel本身。 –

+0

你是對的!弄糊塗了。 –

-1
  • 控制器驗證用於數據
  • 模型做任何事,但驗證輸入和控制流的請求,並調用模型。
  • 控制器渲染視圖或控制應用程序流程直到 流程
  • 結束視圖在應用程序流程結束時呈現。

混和使用MVC HTTP流量,我想你可以枚舉這種方式:

  1. HTTP GET請求控制器驗證輸入(線路,參數等)

  2. 型號做「應用邏輯「就像做一些算法一樣,調用 Db等。可能需要像ViewModels那樣的'數據調整'(ViewModel 可能是負責建模視圖)

  3. 控制器選擇一個特定的視圖和ViewModel。

  4. 視圖呈現並顯示給用戶。客戶端又名查看邏輯 可以在視圖中發生,如驗證表單或執行更多請求。 (爲簡單起見,我離開了這一點流)

    比方說,我填表,並從視圖提交

  5. HTTP POST請求的一些數據。

  6. 控制器驗證數據,模型做的業務邏輯和控制器 重定向到HTTP GET(重新開始)

總之,你最終服務於獲取動詞意見,提交給控制器的修改上Post動詞和模型做任何事輸入驗證和流量控制,並最終重定向到另一個Get動詞。

這隻有在您使用PRG模式時才真正被推薦爲最佳實踐。

這對你有意義嗎?

+0

爲什麼-1?我真的很感激評論。 –

相關問題