C# 比较属性数据注释不起作用

C# 比较属性数据注释不起作用,c#,asp.net-mvc,data-annotations,C#,Asp.net Mvc,Data Annotations,手动验证对象时,“比较”属性无法工作。我制作了一个简单的测试控制台应用程序,它也不工作。我做错什么了吗 我使用最新版本的.Net Framework 4.5.1。 我制作这个控制台测试应用程序是因为它在我的MVC应用程序中也不起作用,该应用程序在业务层(单独的类库)中执行DataAnnotation 谢谢 要测试的类: public class Change // : IValidatableObject { /// <summary> /// The current

手动验证对象时,“比较”属性无法工作。我制作了一个简单的测试控制台应用程序,它也不工作。我做错什么了吗

我使用最新版本的.Net Framework 4.5.1。 我制作这个控制台测试应用程序是因为它在我的MVC应用程序中也不起作用,该应用程序在业务层(单独的类库)中执行DataAnnotation

谢谢

要测试的类:

public class Change // : IValidatableObject
{
    /// <summary>
    /// The current password of this account.
    /// </summary>
    [Required(ErrorMessage = "Huidig wachtwoord is verplicht")]
    [DataType(DataType.Password)]
    public string CurrentPassword { get; set; }

    /// <summary>
    /// The new password for the logged in user account.
    /// </summary>
    [Required(ErrorMessage = "Wachtwoord is verplicht")]
    [DataType(DataType.Password)]
    public string NewPassword { get; set; }

    /// <summary>
    /// This must be the same as <see cref="NewPassword"/>.
    /// </summary>
    [Required(ErrorMessage = "Bevestig wachtwoord is verplicht")]
    [Compare("NewPassword")]
    [DataType(DataType.Password)]
    public string NewPassword2 { get; set; }

    //public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    //{
    //    return new List<ValidationResult>();
    //}
}
添加
IValidatableObject
也不起作用。

试试这个

 private List<ValidationResult> ValidateModel(object model)
        {
            var validationResults = new List<ValidationResult>();
            var ctx = new ValidationContext(model, null, null);
            Validator.TryValidateObject(model, ctx, validationResults, true);
            return validationResults;
        }
私有列表验证模型(对象模型)
{
var validationResults=新列表();
var ctx=新的ValidationContext(model,null,null);
TryValidateObject(model,ctx,validationResults,true);
返回验证结果;
}
试试这个

 private List<ValidationResult> ValidateModel(object model)
        {
            var validationResults = new List<ValidationResult>();
            var ctx = new ValidationContext(model, null, null);
            Validator.TryValidateObject(model, ctx, validationResults, true);
            return validationResults;
        }
私有列表验证模型(对象模型)
{
var validationResults=新列表();
var ctx=新的ValidationContext(model,null,null);
TryValidateObject(model,ctx,validationResults,true);
返回验证结果;
}
试试这个

 private List<ValidationResult> ValidateModel(object model)
        {
            var validationResults = new List<ValidationResult>();
            var ctx = new ValidationContext(model, null, null);
            Validator.TryValidateObject(model, ctx, validationResults, true);
            return validationResults;
        }
私有列表验证模型(对象模型)
{
var validationResults=新列表();
var ctx=新的ValidationContext(model,null,null);
TryValidateObject(model,ctx,validationResults,true);
返回验证结果;
}
试试这个

 private List<ValidationResult> ValidateModel(object model)
        {
            var validationResults = new List<ValidationResult>();
            var ctx = new ValidationContext(model, null, null);
            Validator.TryValidateObject(model, ctx, validationResults, true);
            return validationResults;
        }
私有列表验证模型(对象模型)
{
var validationResults=新列表();
var ctx=新的ValidationContext(model,null,null);
TryValidateObject(model,ctx,validationResults,true);
返回验证结果;
}

尝试使用另一个重载的
Validator.ValidateObject
,该重载使用
Boolean
参数来验证所有属性:

public static void ValidateObject(
  Object instance,
  ValidationContext validationContext,
  bool validateAllProperties
)
参考:

例如:

try
{
  Validator.ValidateObject(change, new ValidationContext(change, null, null), true);
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
  Console.ReadLine();

  throw ex;
}

尝试使用另一个重载的
Validator.ValidateObject
,该重载使用
布尔
参数来验证所有属性:

public static void ValidateObject(
  Object instance,
  ValidationContext validationContext,
  bool validateAllProperties
)
参考:

例如:

try
{
  Validator.ValidateObject(change, new ValidationContext(change, null, null), true);
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
  Console.ReadLine();

  throw ex;
}

尝试使用另一个重载的
Validator.ValidateObject
,该重载使用
布尔
参数来验证所有属性:

public static void ValidateObject(
  Object instance,
  ValidationContext validationContext,
  bool validateAllProperties
)
参考:

例如:

try
{
  Validator.ValidateObject(change, new ValidationContext(change, null, null), true);
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
  Console.ReadLine();

  throw ex;
}

尝试使用另一个重载的
Validator.ValidateObject
,该重载使用
布尔
参数来验证所有属性:

public static void ValidateObject(
  Object instance,
  ValidationContext validationContext,
  bool validateAllProperties
)
参考:

例如:

try
{
  Validator.ValidateObject(change, new ValidationContext(change, null, null), true);
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
  Console.ReadLine();

  throw ex;
}

调用Validator.ValidateObject(change,newvalidationcontext(change),true)对我有效,布尔值告诉验证器验证所有属性

调用Validator.ValidateObject(change,new ValidationContext(change),true)对我有效,布尔值告诉验证器验证所有属性

调用Validator.ValidateObject(change,new ValidationContext(change),true)对我有效,布尔值告诉验证器验证所有属性

调用Validator.ValidateObject(change,new ValidationContext(change),true)对我有效,布尔值告诉验证器验证所有属性

我确实在Compare属性中发现了另一个bug,这个bug目前还没有在NuGet软件包中发布。我确实在Compare属性中发现了另一个bug,这个bug目前还没有在NuGet软件包中发布。我确实在Compare属性中发现了另一个bug,这个bug目前还没有在NuGet软件包中发布。我确实在Compare属性中发现了另一个bug,这个bug目前还没有在NuGet软件包中发布。你能告诉我真相是什么吗?为什么必需的属性在没有使用true重载的情况下工作而不使用compare呢?哦,我在MSDN上的TryValidate文档中看到,如果不使用true重载,只有必需的属性才有效。你能告诉我true的作用吗?为什么必需的属性在没有使用true重载的情况下工作而不使用compare呢?哦,我在MSDN上的TryValidate文档中看到,如果不使用true重载,只有必需的属性才有效。你能告诉我true的作用吗?为什么必需的属性在没有使用true重载的情况下工作而不使用compare呢?哦,我在MSDN上的TryValidate文档中看到,如果不使用true重载,只有必需的属性才有效。你能告诉我true的作用吗?为什么必需的属性在没有使用true重载和compare not重载的情况下工作?哦,我在MSDN上的TryValidate文档中看到,如果不使用true重载,则只验证必需的属性