2011-09-21 39 views
0

我在兩個相似的視圖上使用相同的模型。一個是用戶配置文件視圖,另一個是同一頁面的管理員視圖。管理員的視圖使用用戶配置文件視圖不具有的更多標誌。使用不可空類型時會出現此問題。即。如果我們不使用模型中的布爾值,那麼當模型在「提交」之後回發給控制器時,該布爾值將默認爲false並且不爲null,如果我們堅持模型,則會導致錯誤的數據。MVC 3在兩個相似的視圖中使用相同的模型並且使用非空類型

除了有兩個極其相似的模型,MVC 3的正確處理方式是什麼?

謝謝!

回答

1

據我所知,你想知道你怎麼能識別窗體上的標誌。

添加到您的網頁隱藏元素的每個複選框,這將指示覆選框的存在。

除了有兩個極其相似的模型,MVC 3 對此有何處理?

您應該創建部分視圖。

ADD

關於接受其他的建議,最好的和安全的方式是檢查(在接收操作)什麼是標誌可以當前用戶改變(自己的權利)和比基改變它。

0

如果我保證正確,您必須在您的模型中實現可空的布爾值,並據此採取相應的行動來處理它們。

請看this answer以獲取類似的問題。你會發現一些可能有所幫助的鏈接

+0

在此只鏈接關於cast(布爾)到(布爾?),但不返回從頁面NULL。從頁面返回NULL是物理上可變的(因爲bool是值類型)。怎麼樣(布爾?)它也是結構。 –

0

你應該意識到過量發佈的風險。這聽起來像管理視圖有一些授權角色或權限的方式,配置文件視圖不通過一組複選框。聰明的用戶可能會弄​​清楚設置什麼字段來給自己一個他不應該擁有的角色或特權。如果您有一個操作來處​​理來自兩個視圖的表單數據,則無法確定是否發生了這種情況。

最簡單的解決方案(如果您不想製作多個視圖模型)是將表單發回到不同的控制器操作。管理員級別的操作將使用布爾值更新模型,其他操作不會。這可以防止任何過度發佈風險。 向視圖中添加隱藏字段將不會給您帶來任何安全性;不要相信你從瀏覽器獲得的數據。決不。

相關問題