[英]ASP.NET MVC Custom Validation
我创建了一个简单的自定义验证,以确保输入的时间采用12小时格式,并且文本输入中设置了“ 99:99”掩码,因此我将得到:
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框架一起使用。 假设我有一个必填字段。 当我第一次输入该表单时,该字段不会触发模糊验证。 我可以输入废话,删除废话,但不能触发验证。 这就是为什么我很困惑。 似乎与默认行为不同。 我认为像我提到的示例一样,尝试尝试提交后将触发验证。
问题1:
Javascript String.substring()
工作方式与C#不同。 第二个参数不是长度,而是结束索引。 http://www.w3schools.com/jsref/jsref_substring.asp
问题2:
根据我的经验,它通常也可以验证onBlur
。
1.)我的第一个答案是错误的; 我需要再看一遍。
2.)验证对抠像和模糊的检查; 您可以在options对象中将它们都设置为params
onkeyup: false,
onblur: false
为什么不只使用正则表达式验证器,然后让IT人员担心客户端代码。 您可以使用如下形式:
<asp:RegularExpressionValidator ID="revTime" ControlToValidate="txtTime" ValidationExpression="[0]{0,1}[1-9]:[0-5][0-9]|[1][0-2]:[0-5][0-9]" ValidationGroup="x" runat="server" ErrorMessage="Not a valid time." />
如果使用的是AjaxControlToolkit,则可以使用其FitleredTextBoxExtender过滤编辑,如下所示:
<ajaxToolkit:FilteredTextBoxExtender ID="fteTime" runat="server" TargetControlID="txtTime" FilterMode="ValidChars" FilterType="Numbers, Custom" ValidChars=":" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.