Я не могу заставить атрибут compare работать, когда я проверяю объект вручную. Я сделал простое тестовое консольное приложение, которое также не работает. Я что-то не так?Сравнить атрибут DataAnnotations не работает
Я использую новейшую версию .Net Framework 4.5.1. Я сделал это консольное тестовое приложение, потому что оно также не работает в моем приложении MVC, которое выполняет dataannotations в бизнес-слое (отдельная библиотека классов).
Спасибо.
Тестируемый класс:
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>();
//}
}
Консоль приложения:
class Program
{
static void Main(string[] args)
{
var change = new Change()
{
CurrentPassword = "ABC",
NewPassword = "123",
NewPassword2 = "12345678"
};
Console.WriteLine("Initial values:");
Console.WriteLine("NewPassword: " + change.NewPassword);
Console.WriteLine("NewPassword Confirm: " + change.NewPassword2);
Console.WriteLine();
Console.WriteLine("Let's see if the compare attribute works...");
Console.WriteLine("----------------------------------------------");
Console.WriteLine();
try
{
Validator.ValidateObject(change, new ValidationContext(change, null, null));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
throw ex;
}
Console.WriteLine("Validation doesn't work because you see this line.");
Console.ReadLine();
}
}
Добавление IValidatableObject
также не работает.
Я нашел еще одну ошибку в атрибуте Compare, который в данный момент еще не выпущен с пакетами NuGet. https://aspnetwebstack.codeplex.com/workitem/1401 –