Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
C# 仅当值更改时验证属性?_C#_.net_Asp.net Mvc_Validationattribute - Fatal编程技术网

C# 仅当值更改时验证属性?

C# 仅当值更改时验证属性?,c#,.net,asp.net-mvc,validationattribute,C#,.net,Asp.net Mvc,Validationattribute,我想编写一个自定义ValidationAttribute,用于检查给定值是否唯一 问题是,在编辑屏幕中,不能保证用户实际更改了值,从而导致错误 有没有办法在我的属性中检查值是否实际更改?或者只能在值更改时触发属性 我感觉这个需求可能不属于属性?当你说ValidationAttibute时,你的意思是使用DataAnnotations吗?如果是这样的话,那么所有这些都适用,否则,对不起,我误解了,这只是其中的一部分 我认为您最好的选择是在存储库或BLL中使用记录的唯一密钥来执行此操作,至少我是这样

我想编写一个自定义ValidationAttribute,用于检查给定值是否唯一

问题是,在编辑屏幕中,不能保证用户实际更改了值,从而导致错误

有没有办法在我的属性中检查值是否实际更改?或者只能在值更改时触发属性


我感觉这个需求可能不属于属性?

当你说ValidationAttibute时,你的意思是使用DataAnnotations吗?如果是这样的话,那么所有这些都适用,否则,对不起,我误解了,这只是其中的一部分

我认为您最好的选择是在存储库或BLL中使用记录的唯一密钥来执行此操作,至少我是这样做的。获取记录以前的值,并查看它们是否更改。如果它们确实发生了更改,则运行唯一性检查

如果您可以将此逻辑引入ValidationAttribute,那么您将获得更多的功能,但我不确定ValidationAttribute是否是最好的,因为有办法绕过它们。根据我对这些属性的理解,您应该仅将它们用作业务逻辑验证的补充,而不是验证模型的唯一方法

编辑: 很公平,现在让我们看看我是否能给你一个答案来帮助你:)检查这个链接,它是检查任何表中任何属性唯一性的代码。相当深入的LINQ到SQL的东西,但看起来它工作得很好。您应该能够像使用
属性一样用它装饰任何属性


前两句话不好听。你能澄清一下唯一性与变更跟踪有什么关系吗?他说的是,如果一个用户的电子邮件地址是test@test.com当该用户更新其个人资料时,他希望检查电子邮件地址(仅用于说明的示例)是否仍然是唯一的。但是,如果用户没有更改其电子邮件地址,则其唯一性检查将失败,因为test@test.com已在数据库中为正在更新的用户创建。唯一性检查也在模型上强制执行,但我想创建一个属性(或数据批注)这样我就可以利用自动客户端检查,并将业务需求规则放在一个位置。