Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 RequiredAttribute不';t出现在客户端验证、派生类上_Asp.net Mvc 3_Unobtrusive Validation - Fatal编程技术网

Asp.net mvc 3 RequiredAttribute不';t出现在客户端验证、派生类上

Asp.net mvc 3 RequiredAttribute不';t出现在客户端验证、派生类上,asp.net-mvc-3,unobtrusive-validation,Asp.net Mvc 3,Unobtrusive Validation,我的viewmodel继承自一个类,该类继承自一个抽象类,该抽象类的属性具有[Required]属性,但该规则不会出现在DOM中,并且不引人注目的验证不会捕获错误 display属性可以正常运行,但验证DOM属性不会添加到textarea 我的看法是: @model FormPersonView .... @Html.TextAreaFor(m => m.Description) @Html.ValidationMessageFor(m => m.Description) publ

我的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; }
}
我的代码包含以下内容:

@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; }
}

为什么它只使用一个继承级别,而不是两个?它确实在服务器端工作。

正是这个问题。定义视图时,模型是您定义的类型
@model FormPersonView
。数据注释将仅对该特定类型起作用,即使您从子级派生了属性,它们的数据注释也不会被使用

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


希望这对你有所帮助。

哇,我完全没有听到这个答案,对不起。我仍然有这个问题。我试着按照你的建议去做(只针对特定字段,而不是整个表单),但它仍然没有向HTML元素添加验证属性。根据我的示例,我尝试在编辑器中使用模型作为
BasePerson
FormPersonView
。我所说的是,如果您有视图模型的层次结构,则必须在叶上定义装饰。在您的情况下,无论您在
Person
PersonBase
中定义了什么,它都不会在视图中显示为验证。在
FormPersonView
级别定义所需的一切,并将其作为视图中的模型类型接受-它必须根据定义工作。希望这能澄清我的答案