MVC 3在具有非可空类型的两个相似视图中使用相同模型

时间:2011-09-21 05:32:43

标签: asp.net-mvc-3 asp.net-mvc-views

我在两个相似的视图上使用相同的模型。一个是用户配置文件视图,另一个是同一页面的管理员视图。管理员的视图使用了一些用户配置文件视图不具有的标志。使用非可空类型时会出现此问题。即。如果我们不使用模型中的布尔值,当模型在“提交”之后回发到控制器时,该布尔值将默认为false而不是null,如果我们持久化模型则会导致错误数据。

除了有两个非常相似的模型之外,MVC 3处理这个问题的正确方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

据我所知,您想知道如何识别表格上的标志。

为每个复选框添加隐藏元素,以指示复选框是否存在。

  

除了两个非常相似的模型之外,MVC 3是什么   处理这个问题的正确方法?

您应该创建部分视图。

添加

关于其他建议,最好的和安全的方法是检查(在接收动作中)当前用户可以更改的标志(他的权利),而不是在基础中更改它。

答案 1 :(得分:0)

如果我说得对,你必须在你的模型中实现可空的bool并采取相应的行动来处理它们。

查看this answer类似的问题。你会发现一些可能有帮助的链接

答案 2 :(得分:0)

您应该了解过度发布的风险。这听起来像admin-view有一些方法来授予配置文件视图不通过一组复选框的角色或特权。聪明的用户可能会弄​​清楚要设置哪些字段以给自己一个他不应该拥有的角色或特权。如果您有一个操作来处​​理来自两个视图的表单数据,则无法判断是否已发生这种情况。

最简单的解决方案(如果您不想创建多个视图模型)是将表单发布回不同的控制器操作。管理员级别操作将使用布尔值来更新模型,而其他操作则不会。这可以防止任何过度发布的风险。 向视图添加隐藏字段将不会给您带来安全保障;不信任从浏览器获得的数据。从不。