IP地址的MVC自定义属性不起作用

时间:2016-01-22 14:14:35

标签: jquery asp.net-mvc

在我的模型中,我有一个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中,但它是空的。 因此,不知何故未显示默认错误消息。 我忘了那件事吗?

2 个答案:

答案 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");

现在工作正常。