0

我有一个看起来像这样的模型:

public class TimeAdjustData
{
    [IntegerAllowPlus]
    public int? AddStart { get; set; }
    [IntegerAllowPlus]
    public int? AddEnd { get; set; }
    public TimeSpan? GivenStart { get; set; }
    public TimeSpan? GivenEnd { get; set; }
}

我的目标是允许用户输入一个整数,他们可以在其中为正值添加一个加号。例如,他们应该能够填写 20、-20 或 +20。其中 20 和 +20 在逻辑上是相同的。

我创建了一个自定义验证属性,并在客户端上添加了一个自定义客户端验证规则。

jQuery.validator.addMethod("integerplus", function (value, element, param) {
    if (value[0] === '+') { value = value.substr(1, value.length - 1); }
    return isInteger(value);
});
jQuery.validator.unobtrusive.adapters.addBool("integerplus");

isInteger 是我自己的一个函数,它当然可以验证整数。

我的问题是,即使 MVC 正确呈现它的一个属性,data-val-integerplus它也会呈现一个data-val-number.

在此处输入图像描述

我猜这是因为 AddStart 和 AddEnd 的数据类型是可为空的整数。但这会导致即使输入值通过了我的自定义验证,它也不会通过内置数字客户端验证。所以不知何故我需要避免创建属性data-val-number。我怎样才能做到这一点?

4

1 回答 1

0

看看ModelValidatorProviders.Providers 你可以在 global.asax 中使用它来删除所有验证器提供程序

ModelValidatorProviders.Providers.Clear();

这应该可以解决您的问题,但是您应该查看它,因为这会删除所有隐式验证器..

编辑

如果您不想删除整个应用程序的验证,只需在涉及 javascript 的页面上将其删除:

$('#yourField').rules('remove', 'number');
于 2013-09-17T12:15:07.710 回答