我正在开发一个 ASP.NET MVC Web 应用程序。在我的主视图中,我得到了以下创建链接:-
<a class="btn btn-success" data-modal="" href="/Staff/Create" id="btnCreate">
<span class="glyphicon glyphicon-plus"></span>
</a>
<!-- modal placeholder-->
<div id='myModal' class='modal fade in'>
<div class="modal-dialog">
<div class="modal-content">
<div id='myModalContent'></div>
</div>
</div>
</div>
我有以下脚本:-
$(function () {
$.ajaxSetup({ cache: false });
$("a[data-modal]").on("click", function (e) {
$('#myModalContent').load(this.href, function () {
$('#myModal').modal({
keyboard: true
}, 'show');
$('#myModalContent').removeData("validator");
$('#myModalContent').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse('#myModalContent');
bindForm(this);
});
return false;
});
});
function bindForm(dialog) {
$('#myModalContent', dialog).submit(function () {
if ($('#myModalContent').valid()) {
$('#progress').show();
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
if (result.success) {
$('#myModal').modal('hide');
$('#progress').hide();
//location.reload();
alert('www');
} else {
$('#progress').hide();
$('#myModalContent').html(result);
bindForm();
}
}
});
}
else {
return false;
}
});
}
现在,当我单击“创建”链接时,“创建”操作方法将返回以下部分 View ,该 View 将在模式弹出窗口内呈现:-
@model SkillManagement.Models.Staff
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Staff</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.GUID, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.GUID)
@Html.ValidationMessageFor(model => model.GUID)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.IsExternal, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.IsExternal)
@Html.ValidationMessageFor(model => model.IsExternal)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
</div>
//code goes here
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
到目前为止,我一切正常,将调用 Get Create 操作方法,并且部分 View 将在模式弹出窗口内呈现。
但现在在我的部分 View 中,如果我单击“创建”按钮,将调用 Post 创建操作方法,但不是由于 javascript 代码。当我在 Post 创建操作方法中检查 Request.IsAjax()
时,我发现它不是 ajax 请求,这意味着部分 View 发送正常的 Post http 而不是 ajax 请求,如定义在脚本,任何人都可以建议我当前的方法有什么问题吗?
谢谢
最佳答案
如您所见,您只需将 #myModalContent
节点传递给 bindForm
函数,jQuery 选择器就会查找
// will never find #myModalContent
$('#myModalContent', myModalContentDOMElement).submit(function () {
相反,你应该做这样的事情
$('form', dialog).submit(function (e) {
e.preventDefault(); // stop the default form submit action
关于javascript - 我的模态弹出窗口中的 .submit(function ()) 不起作用,我的模态弹出窗口将发送正常的 http post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036939/