我有包含部分视图的模式弹出窗口。这个局部视图只是一种形式。我必须在表单提交后用新的局部视图更新/刷新相同的模式弹出窗口,而不是用新的视图重新加载主页(刷新浏览器)。
所以我希望所有的流程都在相同的模式弹出窗口中,像-创建员工-提交点击->按顺序创建员工联系人等,这里员工和员工联系人被用作部分视图。
下面是表格-
@using (Html.BeginForm("EmployeeDetails", "Employee", new { source = string.IsNullOrEmpty(ViewBag.source)? "": @ViewBag.source }, FormMethod.Post, new { @class = "employee-details" }))
{
//submit button
}下面是post方法-
public async Task<ActionResult> EmployeeDetails(EmployeeViewModel model, string source = "")
{
// save code
// after save, I have to return below view as partial view in same modal popup
return RedirectToAction("EmployeeContact", "Employee", new { employeeId = model.Employee.ID });
}我也尝试过使用PartialView语法,但表现也是一样的(重新加载浏览器)-
return PartialView("~/Views/Employee/EmployeeContact.cshtml", new { employeeId = model.Employee.ID });我错过了什么?
发布于 2021-07-13 23:21:12
我使用DOMParser解析html解决了这个问题。我使用了DOMParser,并在ajax成功块之后提取了html中可用的外部js文件。我从另一个堆栈溢出链接得到的所有帮助-
下面是我的代码-
function createGetScriptCallback(url) {
return function () {
return $.getScript(url);
}
}
var form = $(this);
$.ajax({
url: form.attr("action"),
method: form.attr("method"), // post
data: form.serialize(),
success: function (result) {
var parser, doc, scriptsEl, callbacks;
parser = new DOMParser();
doc = parser.parseFromString(result, "text/html")
scriptsEl = doc.querySelectorAll("script[src]");
callbacks = []
for (var i = 0; i < scriptsEl.length; i++) {
callbacks.push(createGetScriptCallback(scriptsEl[i].getAttribute("src")));
}
$.when.apply($, callbacks)
.fail(function (xhr, status, err) {
console.error(status, err);
});
//$('body').append(result);
$("body #EmployeeModal .modal-body").empty();
$("body #EmployeeModal .modal-body").append(result);
$.validator.unobtrusive.parse("form");https://stackoverflow.com/questions/68275903
复制相似问题