比较属性

所述 Compare 属性进行比较的模型的两个属性。

可以使用属性 ErrorMessage 或使用资源文件指定错误消息。

要使用 Compare 属性,请将 using 用于以下命名空间:

using System.ComponentModel.DataAnnotations;

然后,你可以在模型中使用该属性:

public class RegisterModel
{
    public string Email { get; set; }

    [Compare("Email",  ErrorMessage = "The Email and Confirm Email fields do not match.")]
    public string ConfirmEmail { get; set; }
}

当此模型验证时,如果 EmailConfirmEmail 具有不同的值,则验证将失败。

本地化的错误消息

与所有验证属性一样,可以使用资源文件中的错误消息。在此示例中,将从资源文件 Resources 加载错误消息,资源名称为 CompareValidationMessage

public class RegisterModel
{
    public string Email { get; set; }

    ["Email", ErrorMessageResourceType = typeof(Resources),  ErrorMessageResourceName = "CompareValidationMessage")]
    public string ConfirmEmail { get; set; }
}

避免属性名称中的字符串

为避免在属性值中使用字符串,在 C#6+中可以使用 nameof 关键字:

public class RegisterModel
{
    public string Email { get; set; }

    [Compare(nameof(Email),  ErrorMessage = "The Email and Confirm Email fields do not match.")]
    public string ConfirmEmail { get; set; }
}

占位符在错误消息中

你可以在错误消息中使用占位符。占位符 {0} 将替换为当前属性的显示名称,{1} 将替换为相关属性的显示名称:

public class RegisterModel
{
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Display(Name = "Confirm Email")]
    [Compare("Email",  ErrorMessage = "The '{1}' and '{0}' fields do not match.")]
    public string ConfirmEmail { get; set; }
}

如果模型验证失败,则会出现错误消息

电子邮件确认电子邮件字段不匹配。