RangeAttribute验证器未在客户端的MVC4中正确验证整数

时间:2013-04-19 19:49:15

标签: jquery asp.net-mvc-4 attributes

我在我的一个模型属性上有以下RangeAttribute验证器:

[Range(1, 100, ErrorMessage = "Milestone must be between 1 and 100.")]
public int? MilestonePercentage1 { get; set; }

目前,验证器用于标记输入到文本框中的十进制值“.2”。它还标记值“0.2”......

但是,我将小数点左边的数字设置为1或更大:

“1.0”或“1.2”等......验证者认为这是可以的,并且没有标记它。

我在模型中指定int,所以我不知道乳清“.2”或“0.9”被认为是无效的,“1.2”被认为是有效的。

我已经使用NUnit编写了关于模型属性的测试,并且它正确运行(.GetAttributesOn是我们编写的扩展方法):

private RangeAttribute rangeAttribute;

[SetUp]
public void Given()
{
    rangeAttribute = new StudyRandomizationCap()
                .GetAttributesOn(s => s.MilestonePercentage1)
                .OfType<RangeAttribute>()
                .Single();
}

[TestAttribute]
public void DoesNotAllowAValueThatContainsADecimal()
{
    Assert.That(rangeAttribute.IsValid("3.2"), Is.False);
}

但是当我必须依赖客户端验证器使用的javascript时,值“3.2”被认为是有效的。

在使用客户端脚本(我认为是jquery.validate.js?)时,我认为这个验证器的翻译丢失了。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

[Range(typeof(int), 1, 100, ErrorMessage = "Milestone must be between 1 and 100.")]
public int? MilestonePercentage1 { get; set; }