client side validation with dynamically added field

后端 未结 3 1414
盖世英雄少女心
盖世英雄少女心 2020-12-05 01:11

I am using jQuery\'s unobtrusive validation plugin in with ASP.NET MVC. Any fields that are rendered on the server are properly validated.

However, if I dynamically

3条回答
  •  北荒
    北荒 (楼主)
    2020-12-05 01:22

    Here's a blog post you may find useful and that should put you on the right track. Extension method taken from there:

    /// 
    /// 
    /// 
    
    (function ($) {
      $.validator.unobtrusive.parseDynamicContent = function (selector) {
        //use the normal unobstrusive.parse method
        $.validator.unobtrusive.parse(selector);
    
        //get the relevant form
        var form = $(selector).first().closest('form');
    
        //get the collections of unobstrusive validators, and jquery validators
        //and compare the two
        var unobtrusiveValidation = form.data('unobtrusiveValidation');
        var validator = form.validate();
    
        $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
          if (validator.settings.rules[elname] == undefined) {
            var args = {};
            $.extend(args, elrules);
            args.messages = unobtrusiveValidation.options.messages[elname];
            $('[name="' + elname + '"]').rules("add", args);
          } else {
            $.each(elrules, function (rulename, data) {
              if (validator.settings.rules[elname][rulename] == undefined) {
                var args = {};
                args[rulename] = data;
                args.messages = unobtrusiveValidation.options.messages[elname][rulename];
                $('[name="' + elname + '"]').rules("add", args);
              }
            });
          }
        });
      }
    })($);
    

    and then:

    var html = ";
    $("form").append(html);
    
    $.validator.unobtrusive.parseDynamicContent('form input:last');
    

    Updated to add fix referenced in blog post comments, otherwise js errors occur.

提交回复
热议问题