在我的模型中,我有一个IP地址的字符串属性。 这可以是v4或v6 IP地址。 我想验证输入,因此,通过网络上的一些研究,我创建了这个类:
(function ($) {
jQuery.validator.addMethod("isipaddress", function (value, element) {
//if (this.optional(element)) return true;
return true;
});
jQuery.validator.unobtrusive.adapters.addSingleVal("isipaddress");
}(jQuery));
我还为客户端验证创建了此脚本文件:
[IsIPaddress]
public string Network { get; set; }
型号:
body{
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
我已经检查了网页,脚本文件在那里,也是Jquery验证脚本,所有这些都是正确的顺序。 但它没有用。
我哪里出错了?我做错了什么? 为了让这个工作,我需要做什么? 有没有人有关于如何创建自定义验证属性的好例子?
[编辑]
由于我使用了很多ajax调用,因此我在每次调用ajax后调用了一个函数来重新启动验证,并将AddMethod代码放在那里。
现在我确实看到HTML已添加到验证消息的HTML中,但它是空的。 因此,不知何故未显示默认错误消息。 我忘了那件事吗?
答案 0 :(得分:1)
据我记得,不引人注意的jQuery验证插件是自动初始化的,问题是.addMethod调用是在初始化之后,它是为了迟到。您应该在验证初始化或清除表单验证之前尝试addMethod,再次添加方法和init验证。
答案 1 :(得分:0)
我解决了。
在validator.AddMethod中......我没有任何代码可以进行检查。 我认为这将自动从属性代码创建。
所以,我把它改成了这个:
$.validator.addMethod("isipaddress", function (value, element) {
var regexV4 = new RegExp('^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$');
var regexV6 = new RegExp('^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$');
if (regexV4.test(value)) { return true; }
if (regexV6.test(value)) { return true;}
return false;
});
$.validator.unobtrusive.adapters.addBool("isipaddress");
现在工作正常。