我的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; }
}
为什么它适用于一级继承而不是两级?它确实在服务器端工作。
答案 0 :(得分:1)
确实是这个问题。在定义视图时,模型将作为您定义的类型@model FormPersonView
。数据注释仅适用于该特定类型,即使您从子项派生属性,也不会使用其数据注释。
我在项目中提出的解决方案是为类型定义编辑器模板,我需要数据注释才能正常工作,然后在这些模型上调用@EditorFor
。 然后只有才能按预期运行数据注释。
希望这对你有所帮助。