2012-12-12 52 views
1

我有一個視圖和模型(說汽車)。一個字段可以在表單中編輯(其他信息僅顯示)。當查看錶單發佈時,我需要所有信息,而不僅僅是可編輯的屬性。但所有其他屬性都是空的。郵編不可編輯的價值

我用來創建隱藏字段來發布數據,但是當你的隱藏字段比非隱藏字段更多時,它會使代碼變得非常髒。

有沒有方法發佈模型的所有屬性而不使用隱藏字段?

+0

是什麼讓你覺得隱藏的領域不被佔用? – ken2k

+0

看來你必須使用ViewModel模式,並接受CarViewMode實例(它只有必需/可編輯的字段),而不是Car這裏。比你可以將你的CarViewModel映射到Car對象。更多信息:http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3fundamentals_topic7.aspx –

+0

將不可編輯的字段傳遞給客戶端並返回是不行的。它效率低下(傳輸所有數據只是爲了讓您的生活更輕鬆)以及安全風險(您不希望發生改變的好奇用戶更改值)。最好管理服務器上的合併。 –

回答

5

您應該只使用帶有可編輯字段的ViewModel。 在視圖中,將模型的ID作爲隱藏字段放在數據庫中。

在您的控制器中,從數據庫中獲取模型。然後做一些檢查,如果你確實可以修改這個項目(有人可以使用Firebug例如更改隱藏字段中的ID)。

然後,只需使用ViewModel中的字段更新數據庫模型...並再次將模型保存到數據庫。

如果你在視圖中使用CAR模型,有人可能會改變更多的字段,如果你使用CarViewModel,這是不可能的,因爲模型聯編程序只會綁定viewmodel的屬性。

+0

+1「從數據庫獲取模型的id,只更新允許的內容,保存到數據庫」 – ken2k

+0

我也認爲這是正確的方法...使用帶有可編輯字段+模型主鍵的ViewModel,並添加'@Html。 HiddenFor(model => model.Id)'查看並使用ViewModel更新db ... – Nalaka526

2

以html格式發佈的數據是輸入內容。如果你在帖子中需要這些數據,我不認爲隱藏字段存在問題,這是隱藏字段的用途。這就是說,如果你真的想減少隱藏字段的排列,你可以在一個字段中「序列化」所有這些信息,然後在帖子中「反序列化」它。或者在自定義模型活頁夾中。

但是,如果您想要ASP.NET MVC中開箱即用的ModelBinder魔法,您必須使用表單字段。

-1

如果您同意將信息發佈在隱藏字段中,另一個選項是將它們包含在查詢字符串中。

+1

使用查詢字符串可能比使用隱藏字段更糟糕。至少在隱藏字段中,用戶無法看到你傳遞的信息。 –

+0

是的,他們肯定是。 –