0

我创建了一个名为“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>

这不会发生您添加自定义属性。在标记中,选择元素中缺少所有与验证相关的属性(如 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;
}, '');

除了“选择”属性之外,有一些东西可以让这一切都很好地工作。

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


更新 没有解决方案,但有一种解决方法,我在这里找到了!祝遇到这个讨厌问题的人好运

4

1 回答 1

2

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

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

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

于 2013-04-25T13:44:15.580 回答