RequiredAttribute不会出现在派生类的客户端验证中

时间:2012-08-25 10:42:30

标签: asp.net-mvc-3 unobtrusive-validation

我的viewmodel继承自一个类,该类继承自具有[Required]属性的属性的抽象类,但该规则不会出现在DOM中,不显眼的验证不会捕获错误。

display属性很好,但验证DOM属性没有添加到textarea

我的观点是:

@model FormPersonView
....
@Html.TextAreaFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)

我的代码有:

public class FormPersonView : Person
{
    //View related stuff
    .....
    .....
}

public class Person : BasePerson
{
    //Person related stuff - validation for these work!
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}

public abstract class BasePerson
{
    //Base person stuff - validation for this doesn't work!
    public string Id { get; set; }

    [Required]
    [Display("Short description of the person")]
    public string Description { get; set; }
}

为什么它适用于一级继承而不是两级?它确实在服务器端工作。

1 个答案:

答案 0 :(得分:1)

确实是这个问题。在定义视图时,模型将作为您定义的类型@model FormPersonView。数据注释仅适用于该特定类型,即使您从子项派生属性,也不会使用其数据注释。

我在项目中提出的解决方案是为类型定义编辑器模板,我需要数据注释才能正常工作,然后在这些模型上调用@EditorFor然后只有才能按预期运行数据注释。

希望这对你有所帮助。