Ненавязчивая проверка не работает с частичным представлением с динамическим добавлением

В настоящее время я сталкиваюсь с проблемой проверки после динамического добавления контента.

У меня есть представление, строго набранное модели ( Order ). У этого ордера может быть много предметов. Модель выглядит примерно так:

 public class Order { [Key] [HiddenInput] public int id { get; set; } [Display(Name = "Order Number")] public string number { get; set; } [Display(Name = "Order Date")] [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] public DateTime date { get; set; } [Required(ErrorMessage = "Beneficiary is required.")] [Display(Name = "Beneficiary")] public int beneficiary_id { get; set; } [Display(Name = "Beneficiary")] public Beneficiary beneficiary { get; set; } [Display(Name = "Items")] public List items { get; set; } [Display(Name = "Payment Method")] public List payment_methods { get; set; } } 

Я ввожу информацию о заказе, а также элементы для этого конкретного заказа. Я попробовал несколько способов добавить контент динамически и, наконец, пошел со Стивеном Сандерсоном .

На мой взгляд, у меня есть регулярная информация о заказе, а затем элементы, где моя модель выглядит примерно так:

 @model trackmeMvc.Models.Model.Order @{ ViewBag.Title = "Create"; Html.EnableClientValidation(); Html.EnableUnobtrusiveJavaScript(); }      @using (Html.BeginForm("Create", "Order", FormMethod.Post, new { @id = "create_order" })) { @Html.ValidationSummary(true, "Order creation was unsuccessful. Please correct the errors and try again.") 
@Html.LabelFor(m => m.date)*
@Html.TextBoxFor(m => m.date, new { @id = "order_date" })
@Html.ValidationMessageFor(m => m.date)

  $(document).ready(function () { $("#addItem").click(function () { var formData = $("#main_div").closest("form").serializeArray(); $.ajax({ url: "/IPO/BlankItemRow", type: "POST", //data: formData, cache: false, success: function (html) { $("#editorRows").append(html); //$.validator.uobtrusive.parseDynamicContent("form *"); //$("#editorRows").removeData("validator"); //$("#editorRows").removeData("unobtrusiveValidation"); //$.validator.unobtrusive.parse("#editorRows"); //$.validator.unobtrusive.parse("#create_ipo"); //$.validator.unobtrusive.parseDynamicContent($(this).first().closest("form")); //$.validator.unobtrusive.parse($("#new_ipo_item")); //$.validator.unobtrusive.parseElement($("#editorRows").find(".editRow:last").children().find("select")); //$("#editorRows").find(".editRow:last").find("select").each(function () { //alert($(this).attr("id")); //$.validator.unobtrusive.parseElement($(this)); //$.validator.unobtrusive.parseDynamicContent($(this)); //$.validator.unobtrusive.parseDynamicContent($(this).attr("name")); //}); //$("#editorRows").children().find(".editRows:last").find("*").each(function () { // alert($(this).attr('id')); //$.validator.unobtrusive.parseDynamicContent('input'); //}); //var form = $(this).closest("form").attr("id"); //$(form).removeData("validator"); //$(form).removeData("unobtrusiveValidation"); //$.validator.unobtrusive.parse(form); } }); return false; }); });  

Это некоторые из вещей, которые я пробовал, и ничего не работает.

Я получил parseDynamicContent от применения ненавязчивой проверки jquery для динамического содержимого в ASP.Net MVC . Я попробовал это в каждом сценарии, о котором я мог думать, но все равно не повезло.

Я также попробовал регулярный синтаксический анализ, удалив подтверждение из формы, а затем снова применив его, но все же добавленные элементы не проверяются:

 
@foreach (var item in Model.items) { @Html.Partial("_NewItem", item) }

… и мой частичный вид будет выглядеть примерно так:

 @model trackmeMvc.Models.Model.Item @{ Layout = ""; Html.EnableClientValidation(true); if (this.ViewContext.FormContext == null) { this.ViewContext.FormContext = new FormContext(); } } 
@using (Html.BeginCollectionItem("order_items")) { @Html.DropDownListFor(m => m.item_id, @items, "None", new { @style = "width:205px;", @id = "ddlItems", @class="ddlItem", @name="ddlItemList" }) @Html.ValidationMessageFor(m => m.item_id) ... }

Итак, что происходит, у меня есть один пустой элемент, отправленный с controllerа на представление по умолчанию, чтобы показать одну пустую строку. Этот элемент проверен, но все, что приходит после того, как я нажимаю кнопку «Добавить элемент», появляется другая строка из этого частичного, но я не могу его проверить. Я попытался выполнить проверку в частичном представлении (до того, как документ готов в основной форме), и все, что я прочитал, я применил, и он всегда заканчивается тем же: проверка первой строки, а не других. Я попробовал проверку Стивена Сандерсона для этой цели – до сих пор не повезло – даже проверка частичных данных, найденных по этой ссылке, и последующая страница, которая относится к частичной проверке …

Что я должен сделать, чтобы заставить эту проверку работать?

    Хорошо, я собираюсь начать с нового ответа здесь.

    Прежде чем вы $.validator.unobtrusive.parse , удалите исходный валидатор и ненавязчивую проверку из формы следующим образом:

     var form = $("#main_div").closest("form"); form.removeData('validator'); form.removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse(form); 

    Этот же ответ описан здесь .

    То, что сработало для меня, было повторное применение валидатора после вызова для загрузки частичного представления. В моем случае я использую $.post().then() но вы можете сделать что-то подобное с обратным вызовом .always() вызова AJAX.

     $.post(url, model, function (data) { //load the partial view $("#Partial").html(data); }).then(function () { $("form").each(function () { $.data($(this)[0], 'validator', false); }); $.validator.unobtrusive.parse("form"); }); 
    Interesting Posts

    Adium перестала работать с пастами у других пользователей

    Почему открытые поля быстрее, чем свойства?

    Отображать мягкую клавиатуру iPhone, даже если подключена аппаратная клавиатура

    В чем разница между User Control, Custom Control и Component?

    Как проверить, является ли тип подтипом ИЛИ типом объекта?

    Могу ли я настроить загрузку Windows без остановки проверки пароля даже при установке пароля?

    Установить путь сборки в Eclipse для программы ndk

    Языковые горячие клавиши удалены сами по себе в Windows 10

    Каковы гарантии порядка оценки, введенные C ++ 17?

    Как переместить выделение в Excel?

    Копирование и вставка с виртуального ПК перестали работать

    C # Использование Reflection для копирования свойств базового classа

    Как подключить несколько устройств к интернет-провайдеру, который предоставляет веб-портал для входа?

    UISearchbar clearButton заставляет клавиатуру появляться

    Почему вы не можете удалить сразу несколько программ в Windows?

    Давайте будем гением компьютера.