MVC自定义数据注解(RequiredAttribute)未应用于选定元素



我创建了一个新的requireattribute扩展名为"RequredWhen"。

它在文本框上工作得很好,但在选择元素上不行。由于某些原因,它们只在回发而不是在客户端验证。"所需"下拉验证好客户端,那么为什么不是"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,它适用于选择元素,所以我不确定为什么它们被排除在我的实现之外。什么好主意吗?

这是我的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;
}, '');

除了"select"属性之外,还有一些东西可以使这些都工作得很好。

我想我的问题可能与这个和这个案子有关,而这个案子似乎还没有解决办法


没有解决方案,但有一个变通办法,我发现它在这里!祝遇到这个麻烦的人好运

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

不,当然不是。Required属性在元数据提供程序中具有与之关联的相应RequiredAttributeAdapter。如果您希望客户端验证为您的自定义属性工作,您应该编写一个自定义适配器(通过派生DataAnnotationsModelValidator<RequiredWhen>)或通过让您的RequiredWhenAttribute实现IClientValidatable接口。

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

最新更新