我的模型看起来像这样:
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
。
我怎么能这样做?
答案 0 :(得分:0)
查看 ModelValidatorProviders.Providers 您可以在global.asax中使用它来删除所有使用
的验证程序提供程序ModelValidatorProviders.Providers.Clear();
这应该可以解决您的问题,但您应该查看它,因为这会删除所有隐式验证器。
修改强>:
如果您不想删除整个应用程序的验证,只需在与javascript有关的页面上删除它:
$('#yourField').rules('remove', 'number');