0

У меня есть частичная, что я загружаю всплывающее окно, в зависимости от значения, выбранного из раскрывающегося списка, несколько раз. Частичное имеет текстовое поле, которое необходимо проверить. Поэтому проблема заключается в том, что валидация работает только в текстовом поле первого частичного. О другом (в данном случае) говорится, что оно действительно. Я создал фиктивное приложение, чтобы показать его здесь. Это в парциальное:jquery unobtrusive validation добавить правила проверки для контроля в частичной загрузке несколько раз

@Html.TextBoxFor(m => m.OrderedQuantity, new { name="somename", data_mini = "true", type = "number", @class = "orderedQuantity removeGroupsRequired" }) 

это на всплывающее окно, где я загружаю парциальное:

$.ajax({ 
     url: '@Url.Action("LoadSpecialOffersByOfferGroup", "Orders")', 
     type: 'POST', 
     data: JSON.stringify(), 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (data) { 
      $('#groupOfferSection').show(); 
      $.each(data, function (val, partial) { 
       $('#specialOrderGroupDetailSection').append(partial); 
       var form = $("#mydiv form") 
          .removeData("validator") 
          .removeData("unobtrusiveValidation"); 

       $('#specialOrderGroupDetailSection').trigger('create'); 
       $.validator.unobtrusive.parse(form); 

      }); 

      $("#mydiv form .orderedQuantity").each(function() { 
       $(this).rules("add", { 
        required: true, 
        messages: { 
         required: "you must provide a quantity!" 
        } 
       }); 
      }); 


     } 
    }); 
$('#load').click(function() { 
    $("#mydiv form").validate().resetForm(); 

    $("#mydiv form").data("validator").settings.ignore = ".removeRequired"; 
    ValidateGroups(); 

    var form1valid = $("#mydiv form").valid(); 
    if (form1valid) { 

     $.mobile.hidePageLoadingMsg(); 
     $('#closeOrderItemAddPopup').click(); 
    } 
}); 
function ValidateGroups() { 

    $("#mydiv form").validate(); 

    if ($("#mydiv form").valid()) { 
     alert("valid"); 
    } else { 
     alert("invalid"); 
    } 
} 

и контроллер часть для загрузки партиалы: только

public ActionResult LoadSpecialOffersByOfferGroup() 
    { 
     List<string> partials = new List<string>(); 
     IList<SpecialOfferGroupDetailBO> specialOfferGroupDetailBos = new List<SpecialOfferGroupDetailBO> 
                      { 
                       new SpecialOfferGroupDetailBO 
                        {ItemID = 123} 
                      }; 
     SpecialOfferGroupDetailVM vm = new SpecialOfferGroupDetailVM(); 
     vm.SpecialOfferGroupID = 1; 
     vm.SpecialOfferGroupName = "group 1"; 
     vm.SpecialOfferGroupDetailBos = specialOfferGroupDetailBos; 
     string specialOfferGroupDetailView = RenderRazorViewToString("SpecialOfferGroupDetail", vm); 
     partials.Add(specialOfferGroupDetailView); 
     IList<SpecialOfferGroupDetailBO> specialOfferGroupDetailBos1 = new List<SpecialOfferGroupDetailBO> 
                      { 
                       new SpecialOfferGroupDetailBO 
                        {ItemID = 125} 
                      }; 
     SpecialOfferGroupDetailVM vm1 = new SpecialOfferGroupDetailVM(); 
     vm1.SpecialOfferGroupID = 2; 
     vm1.SpecialOfferGroupName = "group 2"; 
     vm1.SpecialOfferGroupDetailBos = specialOfferGroupDetailBos1; 
     string specialOfferGroupDetailView1 = RenderRazorViewToString("SpecialOfferGroupDetail", vm1); 
     partials.Add(specialOfferGroupDetailView1); 
     JsonResult jsonResult = Json(partials); 
     return jsonResult; 
    } 

ответ

0

Ваш код звонки .validate() с вашего ValidateGroups функция:

function ValidateGroups() { 

    $("#mydiv form").validate(); 

    .... 

Самая важная вещь, которую следует помнить об этом плагине, это то, что .validate() не является тестирование метод. Это только метод для , инициализирующий плагин на вашей форме. Наиболее типично это делается один раз на DOM готов или загрузка страницы. Это делается только один раз, и любой последующий вызов игнорируется.

$(document).ready(function() { 

    $("#mydiv form").validate(); // initialize validation plugin on DOM ready event 

    .... 

Так как кажется, что вы пытаетесь инициализировать проверку на форму, которая создается динамически, вы могли бы назвать .validate() сразу после того, как ваша форма будет создана или загружена.

$.ajax({ 
    // create/load your form 
    .... 
}); 

$("#mydiv form").validate(); // initialize validation plugin after form is created/loaded 

.... 
+0

nope, не работает. Я попытался сразу после ajax, который загружает партитуры во всплывающем окне, и он не работает. – bokkie

+0

@bokkie, это ненавязчивая проверка, мешающая ему? Независимо от того, если вам нужно вызвать '.validate()' как часть этого проекта, он должен быть вызван, как я указал. – Sparky

Смежные вопросы