我有一个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字段开始填充,但缺少验证。即未执行必填字段等......
答案 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
}