如何在模型对象上执行复杂的验证?

时间:2012-02-07 22:38:03

标签: asp.net asp.net-mvc entity-framework validation entity-framework-4

我的项目在ASP.NET MVC 3中。在我的域中,我有一个由Entity Framework定义的模型对象。为了验证属性,我只需扩展生成的EF对象并添加一个包含所有验证属性的元数据类。

[MetadataType(typeof(ContactInformationMetaData))]
public partial class ContactInformation
{

}

public class ContactInformationMetaData
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    public string Phone { get; set; }

    [EmailValidator]
    public string Email { get; set; }
}

这在大多数情况下效果很好,但现在我有一个更复杂的场景。我不希望需要电话和电子邮件属性,但我想要其中一个属性。换句话说,我想要求设置电子邮件或电话或两者,但不能设置。

我如何执行这样的复杂验证?如果我创建一个自定义验证属性,我会把它放在哪里以及它将如何工作?

2 个答案:

答案 0 :(得分:1)

以下是另一个问题完全(即使电话和电子邮件示例相同): Model Validation / ASP.NET MVC 3 - Conditional Required Attribute

答案 1 :(得分:1)

查看FluentValidation:

http://fluentvalidation.codeplex.com/wikipage?title=mvc

您可以轻松创建这种类型的自定义验证,这是一个非常酷的验证框架