Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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
C# MVC3非侵入性验证不适用于自定义DataAnnotations属性_C#_Asp.net Mvc_Asp.net Mvc 3_Data Annotations_Unobtrusive Validation - Fatal编程技术网

C# MVC3非侵入性验证不适用于自定义DataAnnotations属性

C# MVC3非侵入性验证不适用于自定义DataAnnotations属性,c#,asp.net-mvc,asp.net-mvc-3,data-annotations,unobtrusive-validation,C#,Asp.net Mvc,Asp.net Mvc 3,Data Annotations,Unobtrusive Validation,我有一个自定义属性,它目前是DataAnnotations.RequiredAttribute的一个简单包装器(稍后我将对其进行扩展,但现在只是尝试让这个概念验证工作起来)。然而,这并不适用于MVC3不引人注目的验证 这是一个非常简单的问题,真的 以下是我的自定义属性: [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] public class RequiredA

我有一个自定义属性,它目前是DataAnnotations.RequiredAttribute的一个简单包装器(稍后我将对其进行扩展,但现在只是尝试让这个概念验证工作起来)。然而,这并不适用于MVC3不引人注目的验证

这是一个非常简单的问题,真的

以下是我的自定义属性:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public RequiredAttribute()
    {
    }

    public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
    {
        this.ErrorMessageResourceName = errorMessageResourceName;
        this.ErrorMessageResourceType = errorMessageResourceType;
    }
}
[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }

[CustomValidationAttributes.Required]
public string LastName { get; set; }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "required"
        };

        yield return modelClientValidationRule;
    }
以下是两个模型属性,一个使用自定义属性,一个使用DataAnnotations属性:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public RequiredAttribute()
    {
    }

    public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
    {
        this.ErrorMessageResourceName = errorMessageResourceName;
        this.ErrorMessageResourceType = errorMessageResourceType;
    }
}
[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }

[CustomValidationAttributes.Required]
public string LastName { get; set; }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "required"
        };

        yield return modelClientValidationRule;
    }
以下是剃须刀代码:

<p>
    @Html.TextBoxFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)
</p>
<p>
    @Html.TextBoxFor(model => model.LastName)
    @Html.ValidationMessageFor(model => model.LastName)
</p>

@Html.TextBoxFor(model=>model.FirstName)
@Html.ValidationMessageFor(model=>model.FirstName)

@Html.TextBoxFor(model=>model.LastName) @Html.ValidationMessageFor(model=>model.LastName)

以下是结果输出:

<p>
    <input type="text" value="" name="FirstName id="FirstName" data-val-required="The First Name field is required." data-val="true">
    <span data-valmsg-replace="true" data-valmsg-for="FirstName" class="field-validation-valid"></span>
</p>
<p>
    <input type="text" value="" name="LastName" id="LastName">
    <span data-valmsg-replace="true" data-valmsg-for="LastName" class="field-validation-valid"></span>
</p>


正如ingo在上面的评论中指出的那样,我最终不得不实现
iclientvalidable
,以使它们能够工作。因此,在上面的示例中,我必须将其添加到属性中:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public RequiredAttribute()
    {
    }

    public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
    {
        this.ErrorMessageResourceName = errorMessageResourceName;
        this.ErrorMessageResourceType = errorMessageResourceType;
    }
}
[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }

[CustomValidationAttributes.Required]
public string LastName { get; set; }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "required"
        };

        yield return modelClientValidationRule;
    }
public IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文)
{
var modelClientValidationRule=新modelClientValidationRule
{
ErrorMessage=FormatErrorMessage(metadata.DisplayName),
ValidationType=“必需”
};
收益返回模型ClientValidationRule;
}

你可以在这里@ingo找到你的解决方案——不过我很困惑。如果我没有扩展基本验证,为什么我必须通过实现
IsValid
GetClientValidationRules
来“重新发明轮子”,如果这些实现已经存在并且适用于基本验证属性(
RequiredAttribute
)?我刚刚写了一篇关于创建自定义ValidationAttribute以及如何将其转换为不引人注目的验证的博客。该示例处于启用状态,并使用我编写的属性,该属性要求string属性包含指定的单词或短语。您还可以使用
requiredattributedapter
@JimSchubert注册您的自定义
RequiredAttribute
。您可以链接到博客帖子吗?@AnnL。文章链接在github页面的摘要中。在这里,以防万一: