我正在关注http://mvcmusicstore.codeplex.com
中的ASP.NET MVC Music Store Tutorial by Jon Galloway Microsoft
在设置这个虚构的音乐商店时,我们将Album.cs
作为具有这些代码行的模型
public class Album
{
[Required(ErrorMessage = "An Album Title is required")]
[StringLength(160)]
public string Title { get; set; }
//.......More code follows
我觉得令人困惑的是,为什么验证是通过模型中的Required
属性而不是控制器来完成的?控制器不应该进行验证吗?或者是在模型中进行验证的标准做法......主要是教程来自微软?
谢谢
答案 0 :(得分:4)
我觉得令人困惑的是,为什么验证是在这里完成的 模型中的必需属性,而不是控制器
实际上,这是域模型,它应该对其进行域验证,以确保它保持一致。另一方面,您应该将视图模型暴露给执行视图特定验证的视图。如果此域模型永远不会在此应用程序之外重用,则只能依赖于视图模型验证。
例如,您会看到许多错误示例,将视图特定数据注记属性放在域模型上,例如[DisplayFormat]
和[Display]
。所有这些示例都说明了使用域模型作为视图模型的糟糕设计。
答案 1 :(得分:0)
您在模型中使用DataAnnotations
表示必须在回发到服务器之前填写Title
字段。在控制器中,您还可以检查if ModelState.IsValid
但是在模型级别添加DataAnnotations
是实现数据验证的正确方法。
答案 2 :(得分:0)
我们通常使用Microsoft企业库的验证块来在控制器中进行验证。这使我们能够添加或删除验证 通过修改配置文件很容易。