2013-03-30 56 views
0

我最近在MVC 4/Entity項目中爲現有模型添加了一些用於審計目的的字段。我不需要在編輯頁面上顯示這些字段。但是,它們是模型上的必需字段。MVC 4編輯視圖和「隱藏」參數的最佳做法

就目前而言,編輯頁面仍然有效,但在控制器端,ModelState.IsValid檢查失敗,因爲項目上實際設置的必填字段不會輸出到視圖,因此不會在重新提交時重新提交編輯頁面被提交。

有沒有一種簡單的方法可以糾正這種情況,或者如果不是這樣,以下哪種情況最適合此場景?有更多的選擇嗎?

1)設置隱藏字段的視圖來保存信息(未此選項的風扇,通過在控制器數據周圍太多)

2),上提交,第一裝載由ID的模型,然後根據視圖上顯示的字段設置每個參數(看起來像是額外的不必要的工作)

3)爲模型創建一個構造函數,該模型將自身作爲參數並且拉取任何非默認值並返回一個新的目的。基本上是合併。 (最好我認爲,還有很多額外的工作)

4)???

回答

2

最佳做法是不要在視圖內使用您的域模型。創建一個視圖模型類,其中僅包含視圖中需要的id和字段。將此模型傳遞給您的視圖。更改表單提交操作的參數類型以匹配您的新視圖模型。然後這將通過模型驗證而不使用隱藏的字段。在您的操作方法中,您可以使用視圖模型類的id屬性從數據庫檢索對象,並根據需要更新字段。

希望是有道理的。

+0

這很有道理。儘管我不得不懷疑這是否會導致大量的意見。 – Dakine83

+0

它肯定會導致更多的意見,但它可以保持合理與部分意見。無論如何,這是「最佳實踐」。 – TudyTech

+0

我很抱歉,我不是母語的人。你能最好的向我展示這個例子嗎? –

1

我更喜歡做第二個選項,只要我可以通過單個查詢或數據庫調用獲取現有對象。這讓我保持我的視圖乾淨(所有其他屬性都沒有隱藏字段),並使用更新域模型的現有更新方法。

看看你的代碼。如果更新方法在許多其他地方(很多其他表)中進行更新,那麼您可能會編寫一個簡短版本的更新方法,它只更新相關部分(例如:UpdateContactDetails)。

+0

它只更新一個表,它只有8個字段。這可能是繼續這樣的方式。我會稍微留意一下,看看我能得到什麼其他意見。謝謝! – Dakine83