我创建了一个简单的自定义验证,以使进入确认时间为12小时格式和文字输入有一个'99:99' 掩模组,因此我将获得:ASP.NET MVC自定义验证
12 :00
验证工作在服务器上的伟大:
private ValidationResult ValidateTwelveHourFormat(string time, ValidationContext validationContext)
{
if (String.IsNullOrWhiteSpace(time.Substring(0, 1))
|| Convert.ToInt32(time.Substring(0, 1)) > 1
|| Convert.ToInt32(time.Substring(1, 1)) > 2
|| Convert.ToInt32(time.Substring(3, 1)) > 5)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return ValidationResult.Success;
}
但是,客户端不行为方式上相同的验证我希望:
$.validator.unobtrusive.adapters.addSingleVal('timeformat', 'format');
$.validator.addMethod('timeformat', function (value, element, timeformat) {
if (value) {
if (timeformat == "TwelveHour") {
if (value.toString().substring(0, 1) == ""
|| value.toString().substring(0, 1) > 1
|| value.toString().substring(1, 1) > 2
|| value.toString().substring(3, 1) > 5) {
return false;
}
}
}
return true;
});
客户端将仅正确验证第一个数字。所以如果我输入了3,它会触发很好,但不适用于字符串中的任何其他位置。我在那里扔了一些警报,当我在文本中输入一个字符时,它似乎触发了这个方法。这种行为令我感到困惑,因为我认为在表单首次提交之前这种情况并没有发生,只有在此之后。否则,用户会在第一次进入窗体时看到错误消息,我不认为使用验证方式的浏览器通常可以正常工作。
1.)为什么客户端不能正确验证其他字符位置?
2.)客户为什么在表单尚未提交时进行验证?
更新
1)我用JavaScript的SUBSTR(),因为它的作用就像C#的String.Substring()。
对于问题2 - 我在mvc框架中使用了Data Annoations。假设我有一个被设置为必需的字段。当我第一次输入该表单时,该字段不会触发模糊验证。我可以输入废话,删除垃圾,但不会触发验证。这就是我困惑的原因。这似乎与默认行为有所不同。我会认为,在提交尝试尝试之后会触发验证,就像我提到的示例一样。
JavaScript有'substr'虽然 – Esailija
@Esailija他的代码正在使用'String。substring()',所以我只是解释为什么它不像他期望的那样工作。检查链接。 –
嗯,我只是想把它放在那里,你可以建议他,而不是试图找出什么末尾索引必须在'substring' – Esailija