【发布时间】:2019-01-16 20:40:29
【问题描述】:
我有 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 没有卸载,就像我将脚本放在局部视图中一样。
【问题讨论】:
-
点击后禁用按钮。它将防止多个。
-
@Tomato32 我认为您没有清楚地阅读这个问题。禁用按钮是为了防止多次不必要的点击。
标签: javascript asp.net-mvc-5 bootstrap-modal