如何在MVC ASP.NET中创建复杂的ViewModel

时间:2017-07-03 20:30:54

标签: c# asp.net asp.net-mvc model-view-controller

所以我得到了ViewModels的概念,特别是安全问题,你想要将控制器功能限制在ViewModel中减少的字段集(作为典型的User模型,其中ViewModel没有有关密码和角色的信息。)

假设一个ViewModel派生自不同的模型,如何正确实现它(保持例如安全思想)。这是描述问题的图像

enter image description here

我可以想象,最好是从“Sub-ViewModels”派生而不是直接从Models本身派生。有没有最佳实践方法呢?

2 个答案:

答案 0 :(得分:1)

没有人,视图模型的全部目的是为视图所需的确切数据建模,仅此而已。这不是一个真正的安全问题,我的意思是,如果你要在视频模型中存储密码和东西之类的东西而不是你在以前从未见过的那种级别上做错了。 ViewModels在mvc框架中的主要目的是允许您打包和解压缩多个模型和额外属性,以便您的用户能够完成他们需要完成的任何有针对性的操作,而不会给他们从消防站喝酒的印象。我猜它有一些"安全"因为您不需要传递完整模型,只是因为视图模型中包含某些内容并不意味着您必须主动为该属性输出HTML。大多数这些操作无论如何都应该发生在服务器端,或者在生成HTML的剃刀检查中。

如果您对安全性和控制器过于关注,那么无论如何您都应该考虑3层架构。

答案 1 :(得分:0)

请参阅以下内容:

  

ViewModels in MVC / MVVM / Seperation of layers- best practices?

ViewModel就是大部分时间。您希望用户能够查看什么?通常,ViewModel将在一组页面中重复使用,但可以仅限于一个或两个。

我有很多次使用每个页面的ViewModel继承项目。它不一定要与您的复杂模型匹配。由于各种原因,您可能不希望将大量信息传递到视图中。

我发现创建基本Controller并为每个自定义ViewModel / ViewModel集继承常用函数有很多用处。