ASP.NET MVC - 编辑视图模型

6

在MVC应用程序中,同时拥有视图模型和编辑模型通常是一个好习惯吗?这意味着,我不希望在视图模型上使用验证属性,因为它基本上是只读的。

5个回答

2

我通常为每个视图创建一个新的视图模型。实际上,我发现视图模型的重用非常低,并且试图使它们超级通用并不起作用,会导致一些奇怪的情况。

当我开始创建视图模型时,我会创建这些真正抽象的视图模型,尝试强制执行一堆业务逻辑,但后来我意识到,在大多数情况下,我尝试展示的数据完全不同,无法重用。因此,我开始将我的视图模型分解成仅使用一次的非常小的部分。到目前为止,这种方法效果很好。

现在,我会尽量将大多数业务逻辑放在模型中,而不是视图模型中。在我的例子中,我的模型是一个实体框架模型,我将业务逻辑放在挂在我的数据库对象下的局部类中。


1

如果您的视图是CRUD视图,则使用相同的视图模型是有意义的。在只读视图中,由于您不输入表单,因此将忽略验证属性。一旦您远离CRUD,您就会有更多的变化来构建您的VMs。我有一些情况下,一个字段只能在插入时设置。在这种情况下,我使用相同的VM来呈现添加、只读和更新屏幕(在视图HTML本身中使用DisplayFor vs InputFor),但我在我的插入和更新操作方法上有不同的输入模型。


0

您可以使用您的模型进行编辑。您可以将可编辑属性绑定到视图上,即使有人伪造输入,其他属性仍然保持不变。

public ActionResult Update([Bind(Include=”First, Last”)]User user)

这样可以确保您只获取名字和姓氏字段。

也许您错过了,但不要为不可编辑的模型属性显示可编辑输入。


0
您可以在ViewModel中添加一个名为ReadOnly的属性(布尔类型)。根据该属性,可以呈现适当的视图。

0

我认为你误解了MVC模式中分离视图和模型的目的。

视图是关于定义用户如何看到数据,即网页将会是什么样子。

模型定义将要使用的数据,即视图将要显示的内容。

如果您决定需要两个不同的网页用于查看数据和编辑数据,则按照MVC模式,这两个页面应该有单独的模型和视图。

但我通常不赞成将查看和编辑数据分开为两个网页。在今天的ajax技术下,我只会在一个网页上完成它。


他在谈论ViewModels,而不是Views和Models。 - UpTheCreek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接