与本教程示例相反,ASP.Net中的数据验证应该在控制器中,而不是在模型中?
我正在学习微软Jon Galloway的ASP.NET MVC音乐商店教程 在建立这个虚拟的音乐商店时,我们将与本教程示例相反,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
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示例,其中数据在模型中而不是在控制器中进行验证。。。。