经过一年左右的 MVC 经验,我仍然对一件事感到困惑:如何有效地将 DataAnnotations 与 ModelState.IsValid 一起使用?对于简单的教程示例,这一切都很好,我对此没有任何疑问。但假设我有以下模型:
Public Class Movie
Public Property MovieID As Integer
Public Property Title As String
Public Property Year As Integer
Public Property AddedByUser As String
End Class
现在数据库中需要字段 AdditionalByUser 但是我不希望用户提供这个,而是基于当前登录用户的业务逻辑。在这种情况下,我将如何使用 DataAnnotation 属性?如果我将这个字段设为必填,那么当我说:
Public Function SaveMovie(ByVal entity as Movie) As ActionResult
If ModelState.IsValid
// Save to DB here...
End If
Return View(entity)
End Function
...验证将失败,因为我在视图绑定中没有该字段。我应该为此设置一个隐藏字段吗?我应该为 SaveMovie 操作编写自定义视图模型吗?我想我可以在业务逻辑中编写自己的验证,但是为什么要使用模型验证呢?自定义模型粘合剂也许?处理这些类型的场景的最佳方法是什么?
再举一个示例场景,插入和更新操作与验证之间的区别是什么?对于更新操作,需要对象的主键。但是,插入的情况并非如此。您是否应该仅仅因为这一关键属性而具有用于插入和更新的单独模型?