Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 数据注释与IDataErrorInfo_.net_Asp.net Mvc_Validation_Data Annotations_Idataerrorinfo - Fatal编程技术网

.net 数据注释与IDataErrorInfo

.net 数据注释与IDataErrorInfo,.net,asp.net-mvc,validation,data-annotations,idataerrorinfo,.net,Asp.net Mvc,Validation,Data Annotations,Idataerrorinfo,数据注释与IDataErrorInfo 两者的利弊? 一个比另一个好?(特别是与MVC相关)看起来DataAnnotation在MVC2.0中得到了官方支持。Scott Guthrie发表了一篇关于在2.0中使用DataAnnotations进行模型验证的文章。考虑到团队似乎朝着这个方向发展,你可能会认为有利于它的投票。 < P>数据注释更容易实现,并直接在MVC 2中支持。p> 但是,IDataErrorInfo允许您执行更复杂的验证(即:生成多个属性的验证等) 然而,这两者可以混合使用。没有

数据注释与IDataErrorInfo

两者的利弊?
一个比另一个好?(特别是与MVC相关)

看起来DataAnnotation在MVC2.0中得到了官方支持。Scott Guthrie发表了一篇关于在2.0中使用DataAnnotations进行模型验证的文章。考虑到团队似乎朝着这个方向发展,你可能会认为有利于它的投票。

< P>数据注释更容易实现,并直接在MVC 2中支持。p> 但是,
IDataErrorInfo
允许您执行更复杂的验证(即:生成多个属性的验证等)


然而,这两者可以混合使用。没有什么能阻止您实现这两种技术。

由于我不想开始一个新问题,因此讨论推迟。我的目的是确定适用于中型ASP.NET MVC项目的最佳实践

让我首先总结一下我们的选择:

1) IDataErrorInfo易于实现。您只需要在模型类中派生IDataErrorInfo。问题是,您让模型绑定强制执行业务规则。业务规则应该由模型强制执行。IDataErrorInfo(以及DataAnnotations)的另一个问题是(从中进行解释)无法报告与单个属性相关的多个错误或与whle对象模型相关的多个错误

2) 对我来说,DataAnnotation就像一个模式检查(验证)。这是应用程序应该进行的第一次检查。但是(IMHO),它不适合实现您的业务规则

3) 实现您自己的ModelBinder。虽然这是可以做到的,但严肃地说,ModelBinder的使用是解析数据并将其绑定到模型,而不是执行复杂的验证和业务规则检查。我会让业务规则检查在您的模型/域层中实现

4) 使用服务层进行您自己的验证(请参阅)。所示示例的优点是使用接口类与控制器和模型状态解耦。另一个选项是从模型层引发适当的异常。当您在单独的应用程序中实现服务层时,后一个选项很有用(例如WCF应用程序)

您认为呢?对于一个中大型项目,您使用过(或打算采用)上述哪些选项?为什么


大家好

关于第1点,我相信.Net 4.5将支持INotifyDataErrorInfo,它可以处理单个属性的多个错误。使用IValidatableObject接口的ComponentModel.DataAnnotations也可以这样做。使用此接口,您还可以执行生成多个属性的验证。