Javascript BeginForm()post方法不返回部分视图
我有一个MVC应用程序,我正在尝试插入对象的属性。为此,我通过jQuery对话框创建了一个模式弹出窗口。我不希望它干扰用户正在执行的其他操作,因此我制作了一个Ajax.BeginForm。我希望在执行插入时,它会在返回PartialView()时关闭,但它会在全屏上打开弹出视图,而不是关闭对话框。另外,基本视图应该是动态的,这一点很重要,这样您就可以在任何页面上打开对话框而不进行回发 我读过其他类似的问题,无法解决我的问题 有一些类似的问题,但没有一个 如果可能,请帮助我实现正确的功能。代码如下: JS:Javascript BeginForm()post方法不返回部分视图,javascript,jquery,asp.net,ajax,asp.net-mvc-5,Javascript,Jquery,Asp.net,Ajax,Asp.net Mvc 5,我有一个MVC应用程序,我正在尝试插入对象的属性。为此,我通过jQuery对话框创建了一个模式弹出窗口。我不希望它干扰用户正在执行的其他操作,因此我制作了一个Ajax.BeginForm。我希望在执行插入时,它会在返回PartialView()时关闭,但它会在全屏上打开弹出视图,而不是关闭对话框。另外,基本视图应该是动态的,这一点很重要,这样您就可以在任何页面上打开对话框而不进行回发 我读过其他类似的问题,无法解决我的问题 有一些类似的问题,但没有一个 如果可能,请帮助我实现正确的功能。代码如下
我的问题可能是因为我的Ajax.begin弹出视图依赖于控制器中与后台视图不同的ActionResult 无论如何,事实证明,如果没有通过Ajax发布帖子,我无法实现我的功能 以下是我所做的(在布局视图中):
ajax post是对话框按钮下的函数。ajax.BeginForm()的操作是什么?如果不想使用ajax回发刷新,那么不要返回部分视图,而是返回Json。返回的视图将绑定到mvc路由中。实际上我不想返回任何内容,它应该只将数据插入数据库并关闭对话框。关键是如果我删除了回报,它会停止工作吗?我听说Ajax.BeginForm()如果没有“return PartialView()”就不能工作。AjaxBeginForm有一个OnSuccess和OnFailure函数,您可以为它附加和拦截有效负载,这就是为什么我说返回JSON。@Ross Bush亲爱的Bush先生,正如您所看到的,我已经有了函数“OnSuccess”,它应该会关闭对话框。当我返回Json时,ActionResults仍然重定向到Json结果,而不是停留在我的当前页面。有什么问题?我输入的onSuccess函数是否错误?
<script>
$(document).ready(function () {
var url = "";
$("#dialog-alert").dialog({
title: 'Error encountered!',
autoOpen: false,
resizable: false,
width: 350,
show: { effect: 'drop', direction: "up" },
modal: true,
draggable: true
});
if ('@TempData["msg"]' != "") {
$("#dialog-alert").dialog('open');
}
$("#lnkServer").on("click", function (e) {
//e.preventDefault(); //use this or return false
url = $(this).attr('href');
$('#dialog-edit').dialog({ title: "Add a new Server" });
$("#dialog-edit").dialog('close');
$("#dialog-edit").dialog('open');
return false;
});
$("#lnkIssType").on("click", function (e) {
//e.preventDefault(); //use this or return false
url = $(this).attr('href');
$('#dialog-edit').dialog({ title: "Add a new Issue Type" });
$("#dialog-edit").dialog('close');
$("#dialog-edit").dialog('open');
return false;
});
$("#lnkUser").on("click", function (e) {
//e.preventDefault(); //use this or return false
url = $(this).attr('href');
$('#dialog-edit').dialog({ title: "Add a new User" });
$("#dialog-edit").dialog('close');
$("#dialog-edit").dialog('open');
return false;
});
$("#lnkDept").on("click", function (e) {
//e.preventDefault(); //use this or return false
url = $(this).attr('href');
$('#dialog-edit').dialog({ title: "Add a new Department" });
$("#dialog-edit").dialog('close');
$("#dialog-edit").dialog('open');
return false;
});
$("#dialog-edit").dialog({
autoOpen: false,
resizable: false,
width: 400,
show: { effect: 'drop', direction: "up" },
modal: true,
draggable: true,
open: function (event, ui) {
//$(".ui-dialog-titlebar-close").hide();
$(this).load(url);
}
//buttons: {
// "Cancel": function () {
// $(this).dialog("close");
// }
//}
});
});
function onSuccess() {
$("#dialog-edit").dialog('close');
}
</script>
<div id="container">
@using (Ajax.BeginForm("AddDept", new AjaxOptions { OnSuccess = "onSuccess" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div>
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.Department_Name)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Department_Name, htmlAttributes: new { @class = "form-control text-box single-line input-properties", placeholder = "Collections" })
</div>
<div class="editor-label">
@Html.ValidationMessageFor(model => model.Department_Name)
</div>
<input type="submit" value="Submit" class="btn btn-default btn-add-properties" />
</fieldset>
</div>
}
</div>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddDept([Bind(Include = "Department_Name")] Department @dept)
{
try
{
if (ModelState.IsValid)
{
db.Departments.Add(@dept);
db.SaveChanges();
TempData["Msg"] = "Data has been saved successfully";
return PartialView();
//return Redirect(System.Web.HttpContext.Current.Request.UrlReferrer.PathAndQuery);
}
}
catch
{
TempData["Msg"] = "Probably the record already exists. If not, contact Georgi Georgiev, RA Dept.";
return PartialView();
}
return PartialView(@dept);
}
$("#dialog-edit").dialog({
autoOpen: false,
resizable: false,
width: 400,
show: { effect: 'drop', direction: "up" },
modal: true,
draggable: true,
open: function (event, ui) {
//$(".ui-dialog-titlebar-close").hide();
$(this).load(url);
},
buttons: [{
text: "Submit",
"class": "btn-add-properties",
click: function () {
var form = $('form', this);
$.post(form.prop('action'),
form.serialize(),
function (response) {
alert("success");
})
.fail(function () {
alert("error");
});
$("#dialog-edit").dialog('close');
}
}]
});