Передача экземпляра Jquery DataTables в функцию onsubmit - PullRequest
0 голосов
/ 01 июня 2019

У меня есть страница с основными данными, я создал функцию javascript во внешнем файле, которая всегда вызывается при отправке любой формы, эта функция отправляет пост-вызов ajax соответствующему контроллеру ASP.NET MVC, а при успешном контроллере возвращает объект json в функцию SubmitForm (), которая, в свою очередь, перезагружает экземпляр с данными и отображает уведомление, все работает нормально, но теперь, когда мне нужно динамически отобразить несколько таблиц данных на одной странице, я всегда получаю сообщение об ошибке (Не удается прочитать свойство 'перезагрузка' из неопределенного)

Я попытался добавить необязательный параметр в функцию SubmitForm (form, id = ''), поэтому в случае, если моя форма возвращает идентификатор, она перезагружает соответствующий объект данных, но выдает ту же ошибку.

//JS function in file.js
function SubmitForm(form, id = '') {
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
    $.ajax({
        type: "POST",
        url: form.action,
        data: $(form).serialize(),
        success: function (data) {
            if (data.success) {
                //global variable that is always present in all pages
                datatable.ajax.reload();
                if (id) {
                    var tbl = $(id).dataTable();
                    tbl.ajax.reload();
                }
                $(form)[0].reset();
                $.notify(data.message, { globalPosition: "top center", className: "success" });
                if (data.type != "Add") {
                    $("#myModal").modal('hide');
                }
            }
        }
    });
}
return false;
}
  //MVC FORM in partial view
@using (Html.BeginForm("AddOrEditSE", "ProjectStaff", FormMethod.Post, new 
{ id = "form", onsubmit = "return SubmitForm(this,'#SE')" }))
{
    // elements
}

Ожидаемый результат:

сообщение об успешном уведомлении Notify.js и перезагрузка соответствующей таблицы данных. (в данном случае #SE)

Фактический результат:

Ошибка Не удается прочитать свойство 'reload' из неопределенного

1 Ответ

0 голосов
/ 01 июня 2019

Мне удалось решить проблему после некоторого копания, я определил свой момент данных в переменной и в свойстве onsubmit формы отправил это имя переменной, в операторе if я получил доступ к API данных с помощью variablename.DataTable ().ajax.reload ();

function SubmitForm(form, tbl = null) {
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
    $.ajax({
        type: "POST",
        url: form.action,
        data: $(form).serialize(),
        success: function (data) {
            if (data.success) {
                datatable.ajax.reload();
                if (tbl) {
                    //to access datatable instance, use varname.DataTable().
                    tbl.DataTable().ajax.reload();
                }
                $(form)[0].reset();
                $.notify(data.message, { globalPosition: "top center", className: "success" });
                if (data.type != "Add") {
                    $("#myModal").modal('hide');
                }
            }
        }
    });
}
return false;
}

Частичное представление формы

@using (Html.BeginForm("AddOrEditSE", "ProjectStaff", FormMethod.Post, new { id = "form", onsubmit = "return SubmitForm(this,SETable)" }))
{
      // elements
}

индексное представление

  var SETable;
  SETable = $("#SE").dataTable({ //parameters });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...