ASP.NET MVC - 用于编辑的ViewModels

时间:2010-05-18 15:58:37

标签: asp.net asp.net-mvc

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

5 个答案:

答案 0 :(得分:2)

我通常会为每个视图创建一个新的视图模型。我发现ViewModel在实践中的重用程度非常低,并试图使它们超级通用并不能很好地工作并导致一些奇怪的情况。

当我第一次开始创建ViewModels时,我会创建这些非常抽象的ViewModel,我会尝试强制执行一堆业务逻辑,但后来我意识到在大多数情况下,我试图在每种情况下显示的数据完全是不同和重用不起作用。所以我刚开始将我的ViewModel分解成一次使用的非常小的部分。到目前为止,这一点运作良好。

我的大多数业务逻辑现在都试图保留在模型中而不是视图模型中。我的情况我的模型是一个实体框架模型,我将业务逻辑放在我的数据库对象之外的部分类中。

答案 1 :(得分:1)

如果您的视图是CRUD视图,则使用相同的视图模型是有意义的。在只读视图中,验证属性将被忽略,因为您没有输入表单。一旦您离开CRUD,您就可以在如何构建VM方面做出更多变化。我有一些情况只能在插入过程中设置字段。在这种情况下,我使用相同的VM来渲染add,readonly和update屏幕(在视图html本身中使用DisplayFor vs InputFor),但是我的Insert和Update操作方法有不同的输入模型。

答案 2 :(得分:0)

您可以在ViewModel中拥有一个名为ReadOnly(boolean)的属性。基于该属性,可以呈现适当的视图。

答案 3 :(得分:0)

您可以将模型用于编辑目的。您绑定可编辑属性到View,其他人保持相同,甚至有人假冒输入。

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

这可以确保您获得First和Last命名字段。

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

答案 4 :(得分:0)

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

视图是关于定义用户将如何查看数据,即网页的外观。

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

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

但我一般反对将查看和编辑数据分成两个网页。今天使用ajax,我只想在一个网页上完成。