2013-12-13 99 views
0

我有意見不使用我的視圖上的每個屬性。例如,userId屬性不需要顯示在視圖上。現在我將這個值存儲在一個隱藏的字段中。有沒有一種標準或更安全的方法來保持我的視圖完好無損,如會話或MVC中的其他內容,而不通過字段或隱藏字段暴露我的模型的所有數據?模型視圖的最佳做法

似乎是一個基本的問題,這是一個webforms我可能只是將它存儲在一個會話,但我很想知道,如果MVC提供不同的支持或有最佳實踐方式,我看了。

編輯 好的,我忽略了這一點。當表單將模型提交回控制器時,如果不將UserId字段存儲在只讀編輯值或隱藏字段中,則UserId爲空。

我在問這是怎麼回事?隱藏不需要顯示的用戶標識(或任何屬性)的常規最佳做法是什麼?

+0

是的,您可以從視圖中刪除這些字段(您沒有從用戶那裏獲取任何價值)。這很簡單和標準。如果您在刪除後可能會遇到任何問題,可以協助解決。 – Sami

+0

問題當我沒有他們或代表模型被提交回控制器時,我沒有存儲在隱藏字段或可編輯字段中的字段的隱藏字段中的值返回null – ChampChris

+0

是的..我也有這個問題..當您在控制器中查看時,您可以將值設置爲空字段。因爲你沒有把它從用戶..所以你會在服務器端,這是很容易在控制器訪問 – Sami

回答

1

在每個請求上發送客戶端上的UserId屬性沒有任何問題。在服務器上,您應該實現授權邏輯,該授權邏輯檢查來自瀏覽器的此用戶標識是否實際屬於當前經過身份驗證的用戶。不需要爲此使用任何ASP.NET會話。

如果您使用Forms Authentication來跟蹤當前通過身份驗證的用戶,那麼您可以始終安全地檢索此用戶。

+0

是的,我正在使用窗體身份驗證。也許這個問題真的。這是我第一個完全分層的(分層)MVC應用程序。它的目標是通過webApi支持MVC Web客戶端和移動客戶端。所以執行我的無知。我應該不是一直在使用ORM模型,而是根據需要由用戶操作的每個ORM模型的子集。這看起來像是很多額外的工作,這仍然使我不得不手動告訴保存過程哪個字段應該更新 – ChampChris

+0

我總是爲每個特定的視圖編寫視圖模型。視圖模型可以由多個域模型組成。 –

+0

當你更新一個具有10個字段的表格並且該模型只讓用戶3更新時,該怎麼辦?這是否意味着你得到實體更新更改的字段標記他們修改並保存。所以所有的非修改字段都不會改變? – ChampChris