2012-05-01 34 views
0

我最近纔對Ajax進行了研究(對你們的專家們來說我笑),並且我對所有增加的功能感到興奮。但有一些擔憂。關於Ajax在ASP.NET MVC3中的使用

  1. 表單提交

    在Ajax的實施例中,要麼產生一個JSON對象自動地(序列化形式)或通過從每個DOM項檢索VAL()手動構建的。數據驗證使用JavaScript進行。我認爲我們仍然可以使用Html.EditorFor(和Html.TextboxFor等)來構建表單。但是是否仍然可以使用在模型/視圖模型上添加的DataAnnotation屬性?我見過的MVC + Ajax示例通常不會執行任何類型的服務器端驗證。省略那部分可以嗎?我想這很好,因爲用戶必須啓用JavaScript才能提交表單。但我們需要一些專業建議。

  2. 視圖模型

    在Ajax世界,視圖模型通常表示爲JSON對象。 (如果我錯了,請糾正我)然後,在我們的域模型和視圖模型之間映射的最佳方式是什麼?有沒有像AutoMapper這樣的工具?

    好吧,我需要補充的東西在這裏...........

    這樣做的原因值得關注的是,我發現了一些示例中使用一種叫做Knockout.js(See its website)而不是return Json(model)到將我們視圖模型的json對象返回到調用$.Ajax,其示例顯示視圖模型是在javascript中構建的。

     
    // This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI 
    function AppViewModel() { 
        this.firstName = "Bert"; 
        this.lastName = "Bertington"; 
    } 
    
    // Activates knockout.js 
    ko.applyBindings(new AppViewModel()); 
    

    這樣做的好處是什麼?

    ----我更新的結束----

謝謝你的任何有益的建議。

+10

忽略服務器端驗證永遠不會行。 – SLaks

+0

blaise,正如我在思考網站回覆中所提到的那樣,Automapper將完成您需要的所有功能(如果真的需要,也就是說,一般情況下,99%的時間將視圖模型映射到視圖模型之前,通過httppost返回的模型將成爲您的域模型) –

回答

3

1)不要忽略服務器端驗證。 MVC有一些內置的功能可以在服務器端爲你做一些功能,但是測試它的工作原理是個好主意。通常這只是測試類型,長度,範圍和其他一些基本驗證。任何複雜的驗證都應由您完成。無論哪種方式測試它,以確保正確的驗證確實發生。

2)Json是最常見的,因爲它與JavaScript協同工作,並且易於在.Net中序列化。我推薦Newtonsoft.Json作爲你的序列化庫。然而,您可以使用任何您可以解析的語言,從protobuff到XML。

ViewModel是一種模型,它被髮送到視圖,視圖需要什麼,通常只有一種方式到視圖。

域模型是您堅持的對象,並且通常從客戶端到服務器兩種方式。

一個很好的例子可能是您的視圖需要當前日期,經理數據和員工數據,因此您的視圖模型包含所有這些屬性,但表單僅編輯作爲發送域模型的員工從客戶端返回到要保留的服務器。

MVC擁有ModelBinders,它會將您的發佈數據轉化爲您需要的任何類型(假設您正確遵循其約定)。您不太可能必須將視圖模型映射到域模型。

+0

感謝您的回覆。我的理解是,視圖模型是一個數據傳輸對象。提交表單時,首先將收集的值填充到視圖模型中(針對該視圖)。但是域模型可能有其他屬性,或者有時需要一些數據轉換(如將字符串[]數組轉換爲字符串以存儲在數據庫中)。在這種情況下,我們必須在視圖模型和域模型之間映射這些屬性。 – Blaise

+0

+1 nice summary there;;) –

+0

blaise - 如果您需要複雜(或簡單)映射,請查看AutoMapper。做你需要的一切,然後一些! –