У меня есть кнопка btnAdd
, которая будет загружать частичный вид в режим начальной загрузки следующим образом:
$('#btnAdd').click(function (event) {
event.preventDefault();
var url = $(this).attr("href");
$.get(url, function (data) {
$('#addContainer').html(data);
$.getScript("/Scripts/jquery.unobtrusive-ajax.min.js");
$.getScript("/Scripts/jquery.validate-vsdoc.js");
$.getScript("/Scripts/jquery.validate.js");
$.getScript("/Scripts/jquery.validate.min.js");
$.getScript("/Scripts/jquery.validate.unobtrusive.js");
$.getScript("/Scripts/jquery.validate.unobtrusive.min.js");
$('#addModal').modal('show');
});
});
и частичное представление загружается так:
@using (Ajax.BeginForm("Create", "MasterBanks", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEmp", OnSuccess = "CreateSuccess" }))
{
@Html.AntiForgeryToken()
....
}
и CreateSuccess
, которые обрабатывают форму успеха:
function CreateSuccess(data) {
if (data !== "success") {
$('#addContainer').html(data);
return;
}
$('#addModal').modal('hide');
$('#addContainer').html("");
var grid = new MvcGrid(document.querySelector('#data-table'));
grid.reload();
}
Проблема в том, что когда я нажимаю кнопку, каждый раз, когда я открываю модальное окно, независимо от того, успешен он или нет, или просто открываю модальное окно и снова закрываюсь, не отправляя форму. В следующий раз, когда я отправлю форму, данные будут опубликованы несколько раз, как и то, сколько я открываю модальное.
Если я удалю $.getScript
, проблема не возникнет.
$.getScript("/Scripts/jquery.unobtrusive-ajax.min.js");
$.getScript("/Scripts/jquery.validate-vsdoc.js");
$.getScript("/Scripts/jquery.validate.js");
$.getScript("/Scripts/jquery.validate.min.js");
$.getScript("/Scripts/jquery.validate.unobtrusive.js");
$.getScript("/Scripts/jquery.validate.unobtrusive.min.js");
Почему я использую это $.getScript
? Потому что удаленная проверка работает только после загрузки формы. Почему я не загружаю его при частичном просмотре? Я получил предупреждение XMLHttpRequest Deprecated
при загрузке его в частичном представлении, и после просмотра некоторых статей это решение работает для этого предупреждения, но создало другую проблему.
Я пытался добавить какой-нибудь сценарий, когда нажимал btnAdd
перед привязкой данных: $('#addContainer').html("");
ИЛИ $('#addContainer').empty();
или $('#addModal').data('modal',null);
и некоторые другие, но ни один из них не работает.
Я пробовал с unbind()
также, но не работает, он по-прежнему возвращает несколько отправки. Похоже, что javascipt не выгружен, когда модальное окно закрыто, как если бы я поместил скрипт в частичное представление.