抑制内置jquery客户端验证属性的mvc

时间:2013-09-17 11:44:09

标签: jquery asp.net-mvc validation jquery-validate

我的模型看起来像这样:

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的属性。

enter image description here

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

1 个答案:

答案 0 :(得分:0)

查看 ModelValidatorProviders.Providers 您可以在global.asax中使用它来删除所有使用

的验证程序提供程序
ModelValidatorProviders.Providers.Clear();

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

修改

如果您不想删除整个应用程序的验证,只需在与javascript有关的页面上删除它:

$('#yourField').rules('remove', 'number');