簡體   English   中英

ASP.NET MVC - 用於編輯的ViewModels

[英]ASP.NET MVC - ViewModels For Edit

為MVC應用程序同時查看和編輯模型通常是一種好習慣嗎? 意思是,我不希望視圖模型上的驗證屬性,因為它基本上是只讀的。

我通常為每個視圖創建一個新的視圖模型。 我發現ViewModel在實踐中的重用程度非常低,並試圖使它們超級通用並不能很好地工作並導致一些奇怪的情況。

當我第一次開始創建ViewModel時,我會創建這些非常抽象的ViewModel,我會嘗試強制執行一堆業務邏輯但后來我意識到在大多數情況下,我試圖在每種情況下顯示的數據完全不同並且重用沒有用。 所以我剛開始將我的ViewModel分解成一次使用的非常小的部分。 到目前為止,這一點運作良好。

我的大部分業務邏輯現在都試圖保留在模型中而不是視圖模型中。 我的情況我的模型是一個實體框架模型,我將業務邏輯放在我的數據庫對象之外的部分類中。

如果您的視圖是CRUD視圖,則使用相同的視圖模型是有意義的。 在只讀視圖中,驗證屬性將被忽略,因為您沒有輸入表單。 一旦您離開CRUD,您就可以在如何構建VM方面做出更多變化。 我有一些情況只能在插入過程中設置字段。 在這種情況下,我使用相同的VM來渲染add,readonly和update屏幕(在視圖html本身中使用DisplayFor vs InputFor),但是我的Insert和Update操作方法有不同的輸入模型。

您可以在ViewModel中擁有一個名為ReadOnly(boolean)的屬性。 基於該屬性,可以呈現適當的視圖。

您可以將模型用於編輯目的。 可編輯屬性綁定到View,其他人保持相同,甚至有人假冒輸入。

public ActionResult Update([Bind(Include=”First, Last”)]User user)

這可確保您獲得First和Last命名字段。

也許您錯過了它但不顯示不可編輯模型屬性的可編輯輸入。

我認為你誤解了在模型視圖控制模式中分離視圖和模型的目的。

視圖是關於定義用戶將如何查看數據,即網頁的外觀。

模型定義將使用的數據,即視圖將顯示的內容。

如果您決定需要兩個不同的網頁來查看數據和編輯數據,那么這兩個頁面應該具有單獨的模型和視圖的MVC模式。

但我一般反對將查看和編輯數據分成兩個網頁。 今天使用ajax,我只想在一個網頁上完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM