我在两个相似的视图上使用相同的模型。一个是用户配置文件视图,另一个是同一页面的管理员视图。管理员的视图使用了一些用户配置文件视图不具有的标志。使用非可空类型时会出现此问题。即。如果我们不使用模型中的布尔值,当模型在“提交”之后回发到控制器时,该布尔值将默认为false而不是null,如果我们持久化模型则会导致错误数据。
除了有两个非常相似的模型之外,MVC 3处理这个问题的正确方法是什么?
谢谢!
答案 0 :(得分:1)
据我所知,您想知道如何识别表格上的标志。
为每个复选框添加隐藏元素,以指示复选框是否存在。
除了两个非常相似的模型之外,MVC 3是什么 处理这个问题的正确方法?
您应该创建部分视图。
添加强>
关于其他建议,最好的和安全的方法是检查(在接收动作中)当前用户可以更改的标志(他的权利),而不是在基础中更改它。
答案 1 :(得分:0)
如果我说得对,你必须在你的模型中实现可空的bool并采取相应的行动来处理它们。
查看this answer类似的问题。你会发现一些可能有帮助的链接
答案 2 :(得分:0)
您应该了解过度发布的风险。这听起来像admin-view有一些方法来授予配置文件视图不通过一组复选框的角色或特权。聪明的用户可能会弄清楚要设置哪些字段以给自己一个他不应该拥有的角色或特权。如果您有一个操作来处理来自两个视图的表单数据,则无法判断是否已发生这种情况。
最简单的解决方案(如果您不想创建多个视图模型)是将表单发布回不同的控制器操作。管理员级别操作将使用布尔值来更新模型,而其他操作则不会。这可以防止任何过度发布的风险。 向视图添加隐藏字段将不会给您带来安全保障;不信任从浏览器获得的数据。从不。