ASP.Net,数据验证应该在控制器中,而不是模型,与本教程示例相反?

时间:2013-05-18 10:57:05

标签: asp.net asp.net-mvc asp.net-mvc-3

我正在关注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属性而不是控制器来完成的?控制器不应该进行验证吗?或者是在模型中进行验证的标准做法......主要是教程来自微软?

谢谢

3 个答案:

答案 0 :(得分:4)

  

我觉得令人困惑的是,为什么验证是在这里完成的   模型中的必需属性,而不是控制器

实际上,这是域模型,它应该对其进行域验证,以确保它保持一致。另一方面,您应该将视图模型暴露给执行视图特定验证的视图。如果此域模型永远不会在此应用程序之外重用,则只能依赖于视图模型验证。

例如,您会看到许多错误示例,将视图特定数据注记属性放在域模型上,例如[DisplayFormat][Display]。所有这些示例都说明了使用域模型作为视图模型的糟糕设计。

答案 1 :(得分:0)

您在模型中使用DataAnnotations表示必须在回发到服务器之前填写Title字段。在控制器中,您还可以检查if ModelState.IsValid但是在模型级别添加DataAnnotations是实现数据验证的正确方法。

答案 2 :(得分:0)

我们通常使用Microsoft企业库的验证块来在控制器中进行验证。这使我们能够添加或删除验证 通过修改配置文件很容易。