Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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# 比较两个属性的DataAnnotation_C#_.net_Asp.net Mvc_Asp.net Mvc 4_Data Annotations - Fatal编程技术网

C# 比较两个属性的DataAnnotation

C# 比较两个属性的DataAnnotation,c#,.net,asp.net-mvc,asp.net-mvc-4,data-annotations,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Data Annotations,在允许发布表单之前,是否有任何方法使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同 正则表达式数据批注是否可以使用match函数引用ViewModel中的另一个属性?使用 一个可能的选项是自我验证: 使用方法Validate实现一个接口IValidatableObject,您可以在其中放置验证代码 public class TestModel : IValidatableObject { public string Email{ get; set; } public

在允许发布表单之前,是否有任何方法使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同

正则表达式数据批注是否可以使用match函数引用ViewModel中的另一个属性?

使用


一个可能的选项是自我验证:

使用方法Validate实现一个接口IValidatableObject,您可以在其中放置验证代码

public class TestModel : IValidatableObject
{
    public string Email{ get; set; }
    public string ConfirmEmail { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Email != ConfirmEmail)
        {
            yield return new ValidationResult("Emails mismatch", new [] { "ConfirmEmail" });
        }
    }
}
公共类TestModel:IValidatableObject
{
公共字符串电子邮件{get;set;}
公共字符串确认邮件{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
如果(电子邮件!=确认邮件)
{
返回新的ValidationResult(“电子邮件不匹配”,新[]{“确认邮件”});
}
}
}

请注意:这只是服务器端验证。

在.net core中,它是[Compare(“EmailAddress”,ErrorMessage=“Emails mismatch”)]使用
[Compare(nameof(EmailAddress),ErrorMessage=“Emails mismatch”)]
,因此在将来更改操作名称时,您不会以隐藏的错误结束。很好的呼叫@ukasƨFronczyk,我已经用这个更新了答案。
public class TestModel : IValidatableObject
{
    public string Email{ get; set; }
    public string ConfirmEmail { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Email != ConfirmEmail)
        {
            yield return new ValidationResult("Emails mismatch", new [] { "ConfirmEmail" });
        }
    }
}