18

我最近将 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)
        {

        }

您如何看待这种方法?

4

4 回答 4

26

这是一个简单的例子。假设你有一个像下面这样的对象

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 框架,因此您可以在不同类型的应用程序中使用它。上面的代码片段返回 true,尝试更新属性值以获取验证错误。

并确保查看 MSDN 上的参考:DataAnnotations Namespace

于 2011-08-08T13:30:04.067 回答
5

史蒂夫的例子​​有点过时(虽然仍然很好)。他拥有的 DataAnnotationsValidationRunner 现在可以替换为 System.ComponentModel.DataAnnotations.Validator 类,它具有用于验证已用 DataAnnotations 属性修饰的属性和对象的静态方法。

于 2010-10-15T03:03:54.900 回答
0

我找到了一个使用 Validator 类将 DataAnnotations 与 WinForms 结合使用的不错示例,包括绑定到 IDataErrorInfo 接口,以便 ErrorProvider 可以显示结果。

Here is the link. DataAnnotations Validation Attributes in Windows Forms

于 2019-01-24T14:48:59.377 回答
-1

如果您使用最新版本的 Entity Framework,您可以使用此 cmd 获取错误列表(如果存在):

YourDbContext.Entity(YourEntity).GetValidationResult();
于 2014-06-12T07:39:47.953 回答