0

我的视图模型继承自一个类,该类继承自一个具有属性的抽象类[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; }
}

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

4

1 回答 1

1

正好有这个问题。在定义视图时,模型作为您定义的类型出现@model FormPersonView。数据注释仅适用于该特定类型,即使您从子级派生属性,也不会使用它们的数据注释。

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

希望这对您有所帮助。

于 2012-08-25T15:16:35.300 回答