C# 比较两个属性的DataAnnotation
在允许发布表单之前,是否有任何方法使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同 正则表达式数据批注是否可以使用match函数引用ViewModel中的另一个属性?使用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
一个可能的选项是自我验证: 使用方法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" });
}
}
}