同时为MVC应用程序同时查看和编辑模型通常是一种好习惯吗?这意味着,我不希望在视图模型上使用验证属性,因为它基本上是只读的。
答案 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,我只想在一个网页上完成。