1

我正在尝试使用此处描述的 IValidatableObject http://davidhayden.com/blog/dave/archive/2010/12/31/ASPNETMVC3ValidationIValidatableObject.aspx

但是当我尝试验证时它不会触发,ModelState.IsValid它总是true.

这是我的模型代码:

[MetadataType(typeof(RegistrationMetaData))]
public partial class Registration : DefaultModel
{
    [Editable(false)]
    [Display(Name = "Property one")]
    public int PropertyOne { get; set; }
}

public class RegistrationMetaData :IValidatableObject
{
    [Required(ErrorMessage = "Customer no. is required.")]
    [Display(Name = "Customer no.")]
    public string CustomerNo { get; set; }

    [Display(Name = "Comments")]
    public string Comments { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (new AccountModel().GetProfile(CustomerNo) == null)
            yield return new ValidationResult("Customer no. is not valid.", new[] { "CustomerNo" });
    }
}

我扩展了一个名为 的 LINQ to SQL 表Registration,我的第一个猜测是在 Meta 类上这是不可能的,但我不确定?

我没有收到任何错误,它构建得很好,但该Validate方法不会触发。我错过了什么?

4

1 回答 1

2

那是因为它是Registration应该实现的模型,IValidatableObject而不是RegistrationMetaData

[MetadataType(typeof(RegistrationMetaData))]
public partial class Registration : IValidatableObject
{
    [Editable(false)]
    [Display(Name = "Property one")]
    public int PropertyOne { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (new AccountModel().GetProfile(CustomerNo) == null)
            yield return new ValidationResult("Customer no. is not valid.", new[] { "CustomerNo" });
    }
}

public class RegistrationMetaData
{
    [Required(ErrorMessage = "Customer no. is required.")]
    [Display(Name = "Customer no.")]
    public string CustomerNo { get; set; }

    [Display(Name = "Comments")]
    public string Comments { get; set; }
}
于 2011-09-21T16:00:56.200 回答