在MVC应用程序中,同时拥有视图模型和编辑模型通常是一个好习惯吗?这意味着,我不希望在视图模型上使用验证属性,因为它基本上是只读的。
在MVC应用程序中,同时拥有视图模型和编辑模型通常是一个好习惯吗?这意味着,我不希望在视图模型上使用验证属性,因为它基本上是只读的。
我通常为每个视图创建一个新的视图模型。实际上,我发现视图模型的重用非常低,并且试图使它们超级通用并不起作用,会导致一些奇怪的情况。
当我开始创建视图模型时,我会创建这些真正抽象的视图模型,尝试强制执行一堆业务逻辑,但后来我意识到,在大多数情况下,我尝试展示的数据完全不同,无法重用。因此,我开始将我的视图模型分解成仅使用一次的非常小的部分。到目前为止,这种方法效果很好。
现在,我会尽量将大多数业务逻辑放在模型中,而不是视图模型中。在我的例子中,我的模型是一个实体框架模型,我将业务逻辑放在挂在我的数据库对象下的局部类中。
如果您的视图是CRUD视图,则使用相同的视图模型是有意义的。在只读视图中,由于您不输入表单,因此将忽略验证属性。一旦您远离CRUD,您就会有更多的变化来构建您的VMs。我有一些情况下,一个字段只能在插入时设置。在这种情况下,我使用相同的VM来呈现添加、只读和更新屏幕(在视图HTML本身中使用DisplayFor vs InputFor),但我在我的插入和更新操作方法上有不同的输入模型。
您可以使用您的模型进行编辑。您可以将可编辑属性绑定到视图上,即使有人伪造输入,其他属性仍然保持不变。
public ActionResult Update([Bind(Include=”First, Last”)]User user)
这样可以确保您只获取名字和姓氏字段。
也许您错过了,但不要为不可编辑的模型属性显示可编辑输入。
我认为你误解了MVC模式中分离视图和模型的目的。
视图是关于定义用户如何看到数据,即网页将会是什么样子。
模型定义将要使用的数据,即视图将要显示的内容。
如果您决定需要两个不同的网页用于查看数据和编辑数据,则按照MVC模式,这两个页面应该有单独的模型和视图。
但我通常不赞成将查看和编辑数据分开为两个网页。在今天的ajax技术下,我只会在一个网页上完成它。