如何验证继承的MVC5中的View Model?

时间:2016-09-15 14:44:54

标签: asp.net-mvc

我有一个ViewModel

public class BaseFilter
{
    public virtual string Field1 { get; set; }
    public virtual DateTime? Field2 { get; set; }
    public virtual string Field3 { get; set; }
}


public class TestFilter : BaseFilter, IValidatableObject
{
    [Required]
    public override string Field3 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext context)
    {
         // Validation logic..
    }
}

在我看来,我在特定的视图中使用了TestFilter。

@model MyReportSite.Models.TestFilter

然而,当我在我的观点中发布时,我的验证都没有发生。
如何在继承的ViewModel上使用验证(DataAtrributes和IValidatableObject)?

编辑:为了澄清控制器,我看到我的ViewModel字段开始填充,但缺少验证。即未执行必填字段等......

1 个答案:

答案 0 :(得分:0)

您必须在操作结果中引用派生类,因为这是模型绑定发生时将构造的模型。由于您的基类没有任何验证属性,因此在模型绑定期间不会执行您的属性。

public ActionResult Index(TestFilter model)
{
    // Correct, this model has validation attributes
}

public ActionResult Index(BaseFilter model)
{
    // Incorrect, your base model doesn't have validation attributes
}