Использование DataAnnotations в проекте Windows Forms
Я недавно использовал ASP.Net MVC с DataAnnotations и думал использовать тот же подход для проекта Forms, но я не уверен, как это сделать.
Я установил свои атрибуты, но они, похоже, не проверяются при нажатии кнопки Сохранить.
обновление: я использовал подход Стива Сандерсона который будет проверять атрибуты моего класса и возвращать коллекцию ошибок, например:
try
{
Business b = new Business();
b.Name = "feds";
b.Description = "DFdsS";
b.CategoryID = 1;
b.CountryID = 2;
b.EMail = "SSDF";
var errors = DataAnnotationsValidationRunner.GetErrors(b);
if (errors.Any())
throw new RulesException(errors);
b.Save();
}
catch(Exception ex)
{
}
что вы думаете о такой подход?
3 ответов
пример Стива немного устарел (хотя все еще хорош). DataAnnotationsValidationRunner, который у него есть, может быть заменен системой.ComponentModel.DataAnnotations.Класс Validator теперь имеет статические методы проверки свойств и объектов, которые были украшены атрибутами DataAnnotations.
вот простой пример. предположим, у вас есть объект, подобный следующему
using System.ComponentModel.DataAnnotations;
public class Contact
{
[Required(AllowEmptyStrings = false, ErrorMessage = "First name is required")]
[StringLength(20, MinimumLength = 5, ErrorMessage = "First name must be between 5 and 20 characters")]
public string FirstName { get; set; }
public string LastName { get; set; }
[DataType(DataType.DateTime)]
public DateTime Birthday { get; set; }
}
и пусть у нас есть метод, который создает экземпляр этого класса и пытается проверить его свойства, как показано ниже
private void DoSomething()
{
Contact contact = new Contact { FirstName = "Armin", LastName = "Zia", Birthday = new DateTime(1988, 04, 20) };
ValidationContext context = new ValidationContext(contact, null, null);
IList<ValidationResult> errors = new List<ValidationResult>();
if (!Validator.TryValidateObject(contact, context, errors,true))
{
foreach (ValidationResult result in errors)
MessageBox.Show(result.ErrorMessage);
}
else
MessageBox.Show("Validated");
}
пространство имен DataAnnotations не привязано к MVC framework, поэтому его можно использовать в различных типах приложений. код выше возвращает true, попробуйте обновить значения свойств, чтобы получить ошибки проверки.
и сделать обязательно проверьте ссылку на MSDN: Пространство Имен DataAnnotations
Если вы используете новейшие версии Entity Framework, вы можете использовать этот cmd для получения списка ваших ошибок, если они существуют:
YourDbContext.Entity(YourEntity).GetValidationResult();