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

Jquery MVC自定义DataAnnotation(RequiredAttribute)未应用于选定元素,jquery,asp.net-mvc-3,select,validation,requiredfieldvalidator,Jquery,Asp.net Mvc 3,Select,Validation,Requiredfieldvalidator,我创建了一个名为“RequredWhen”的新RequiredAttribute扩展 它在文本框上运行良好,但在选择元素上运行不好。 由于某些原因,这些仅在回发时验证,而不是在客户端验证。“Required”下拉列表可以很好地验证客户端,那么为什么“RequiredWhen”属性不能验证呢 添加此属性时 [Required] 你得到了这个标记 <select class="customSelect input-validation-error" data-val="true" data-

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

它在文本框上运行良好,但在选择元素上运行不好。 由于某些原因,这些仅在回发时验证,而不是在客户端验证。“Required”下拉列表可以很好地验证客户端,那么为什么“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>
除了“选择”属性之外,还有一些东西可以让这一切都很好地工作

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


更新 没有解决办法,但有一个解决办法,我找到了! 祝有这个麻烦的人好运

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

不,当然不是。所需属性在元数据提供程序中具有与其关联的对应属性。如果您希望客户机验证对您的自定义属性起作用,您应该编写一个自定义适配器(通过从
DataAnnotationsModelValidator
派生),或者在属性实现接口时让
满足您的要求


您可以查看验证框架的源代码,了解如何实现这一点。我已经编写了一个示例。

请显示您的代码。由于其性质,select元素不需要进一步验证,只需要进行必要的验证。在select元素上是否编写了截获RquiredWhen的代码?当您添加必需的属性时,所有这些内容都会自动添加到select元素中。如下所示:使用[Required]属性自动执行此操作。但是,如果我的属性扩展了上面的属性,它就实现了IClientValidable,而我创建的另一个类似的属性“RequiredIf”则按预期工作。我认为问题出在别处。。。
    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;
}, '');