Asp.net mvc 3 MVC 3在两个具有不可空类型的相似视图中使用相同的模型

Asp.net mvc 3 MVC 3在两个具有不可空类型的相似视图中使用相同的模型,asp.net-mvc-3,asp.net-mvc-views,Asp.net Mvc 3,Asp.net Mvc Views,我在两个相似的视图上使用相同的模型。一个是用户配置文件视图,另一个是同一页面的管理员视图。管理员视图使用了用户配置文件视图没有的多个标志。使用不可为空的类型时会出现问题。即,如果我们不使用模型中的布尔值,当模型在“提交”后发回控制器时,该布尔值将默认为false且不为null,如果我们持久化模型,则会导致虚假数据 除了有两个非常相似的模型外,MVC3处理这个问题的正确方法是什么 谢谢 据我所知,您想知道如何识别表单上的标志 为每个复选框添加隐藏元素,这些元素将指示复选框是否存在 除了有两个非常相

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

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


谢谢

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

为每个复选框添加隐藏元素,这些元素将指示复选框是否存在

除了有两个非常相似的模型外,MVC3是什么 正确的处理方法

您应该创建局部视图

添加


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

如果我理解正确,您必须在模型中实现nullable bool,并相应地处理它们


请看一个类似的问题。你会发现一些可能有用的链接

你应该意识到过度发布的风险。这听起来像是admin视图通过一组复选框授予角色或特权的方式,而profile视图没有。一个聪明的用户可能会想出设置哪些字段来给自己一个他不应该拥有的角色或特权。如果您有一个操作来处理来自两个视图的表单数据,则无法判断是否发生了这种情况

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

在此链接中,仅将有关强制转换(bool)的内容链接到(bool?),但不从页面返回NULL。从页面返回NULL在物理上是不可能的(因为bool是值类型)。(bool?)它也是一种结构。