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

与本教程示例相反,ASP.Net中的数据验证应该在控制器中,而不是在模型中?,asp.net,asp.net-mvc,asp.net-mvc-3,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在学习微软Jon Galloway的ASP.NET MVC音乐商店教程 在建立这个虚拟的音乐商店时,我们将Album.cs作为具有这些代码行的模型 public class Album { [Required(ErrorMessage = "An Album Title is required")] [StringLength(160)] public string Title { get; set; } //.......More code follows

我正在学习微软Jon Galloway的ASP.NET MVC音乐商店教程

在建立这个虚拟的音乐商店时,我们将
Album.cs
作为具有这些代码行的模型

public class Album
{
    [Required(ErrorMessage = "An Album Title is required")]
    [StringLength(160)]
    public string Title { get; set; }
    //.......More code follows
我感到困惑的是,为什么在这里验证是由模型中的
Required
属性而不是控制器来完成的?控制器不应该进行验证吗?或者,这是在模型中进行验证的标准实践……该教程是否由microsoft提供


谢谢

您在模型中使用了
DataAnnotations
,该模型规定在将
标题
字段发回服务器之前必须填写该字段。在控制器中,您还可以检查ModelState.IsValid是否为
,但是在模型级别添加
数据注释是实现数据验证的正确方法

您在模型中使用的是
DataAnnotations
,该模型规定在将
标题
字段发回服务器之前必须填写该字段。在控制器中,您还可以检查ModelState.IsValid是否为
,但是在模型级别添加
数据注释是实现数据验证的正确方法

我感到困惑的是,为什么验证是由 模型中的必需属性,而不是控制器


实际上,这就是域模型,它应该有域验证,以确保它保持一致。另一方面,您应该有一个视图模型,该视图模型将公开给在其上执行视图特定验证的视图。如果这个域模型永远不会在这个应用程序之外重用,那么您只能依靠视图模型验证

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

我感到困惑的是,为什么验证是由 模型中的必需属性,而不是控制器


实际上,这就是域模型,它应该有域验证,以确保它保持一致。另一方面,您应该有一个视图模型,该视图模型将公开给在其上执行视图特定验证的视图。如果这个域模型永远不会在这个应用程序之外重用,那么您只能依靠视图模型验证


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

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

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

“如果此域模型永远不会在此应用程序之外重用,则只能依靠视图模型验证。”。这对我来说很有意义。当您被告知在ViewModel中进行所有验证,而不是在模型中进行所有验证时(例如,当使用MVVM时),您会看到这些MVC示例,其中数据在模型中而不是在控制器中进行验证。。。。“如果此域模型永远不会在此应用程序之外重用,则只能依赖视图模型验证。”。这对我来说是有意义的。当您被告知在视图模型中而不是在模型中进行所有验证时(例如,当使用MVVM时),整个混乱就会出现然而,您可以看到这些MVC示例,其中数据在模型中而不是在控制器中进行验证。。。。