2011-09-21 58 views
0

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

除了有两个极其相似的模型,MVC 3的正确处理方式是什么?

谢谢!

回答

1

据我所知,你想知道你怎么能识别窗体上的标志。

添加到您的网页隐藏元素的每个复选框,这将指示复选框的存在。

除了有两个极其相似的模型,MVC 3 对此有何处理?

您应该创建部分视图。

ADD

关于接受其他的建议,最好的和安全的方式是检查(在接收操作)什么是标志可以当前用户改变(自己的权利)和比基改变它。

0

如果我保证正确,您必须在您的模型中实现可空的布尔值,并据此采取相应的行动来处理它们。

请看this answer以获取类似的问题。你会发现一些可能有所帮助的链接

+0

在此只链接关于cast(布尔)到(布尔?),但不返回从页面NULL。从页面返回NULL是物理上可变的(因为bool是值类型)。怎么样(布尔?)它也是结构。 –

0

你应该意识到过量发布的风险。这听起来像管理视图有一些授权角色或权限的方式,配置文件视图不通过一组复选框。聪明的用户可能会弄​​清楚设置什么字段来给自己一个他不应该拥有的角色或特权。如果您有一个操作来处​​理来自两个视图的表单数据,则无法确定是否发生了这种情况。

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

相关问题