MVC自定义DataAnnotation(RequiredAttribute)未应用于select元素

时间:2013-04-25 11:47:45

标签: jquery asp.net-mvc-3 select validation requiredfieldvalidator

我创建了一个名为“RequredWhen”的新RequiredAttribute扩展。

它适用于文本框,但不适用于选择元素。 出于某种原因,这些仅在回发时验证而不是在客户端。 “必需”下拉菜单验证客户端是否正常,为什么“RequiredWhen”属性无法验证?

添加此属性时

[Required]

你得到这个标记

<select class="customSelect input-validation-error" data-val="true" data-val-number="The field x must be a number." data-val-range="Please select the correct range" data-val-range-max="5" data-val-range-min="0" data-val-required="The x field is required." id="x" name="x"></select>

添加自定义属性时不会发生这种情况。在标记中,select元素中缺少所有与验证相关的属性(如data-val等),但它们应用于输入字段。

我是否需要做一些额外的操作来强制验证才能处理选择元素? 我调试时,GetClientValidationRules也不包含这些元素。我确信这是问题的一部分。

我的属性扩展了RequiredAttribute,它适用于select元素,所以我不确定为什么它们被排除在我的实现之外。有任何想法吗?

这是我的javascript在其他元素上运行良好。:

    jQuery.validator.unobtrusive.adapters.add('requiredwhenchecked', [ 'otherproperty', 'checkedproperty', 'otherpropertyvalue' ],function (options) {
    // simply pass the options.params here
    options.rules['requiredWhenChecked'] = options.params;
    }
);

jQuery.validator.addMethod('requiredWhenChecked', function (value, element, params) {
    return true;
}, '');

除了“选择”属性外,还有一些能让这一切顺利进行。

我认为我的问题可能与thisthis案例有关,但似乎还没有解决方案


更新 没有解决方案,但有一个解决方法,我发现它here! 祝所有人有这个讨厌的问题好运

1 个答案:

答案 0 :(得分:2)

  

没有值得一提的属性类   本身,它扩展了RequiredAttribute并且应该类似地工作,   不应该吗?

不,当然不是。 Required元素在元数据提供程序中与其关联的对应RequiredAttributeAdapter。如果您希望客户端验证适用于您的自定义属性,则应编写自定义适配器(通过派生DataAnnotationsModelValidator<RequiredWhen>)或让RequiredWhenAttribute实现IClientValidatable界面。

您可以查看MVC Foolproof Validation验证框架的源代码,了解如何完成此操作。我写了一个例子here