问题描述
我有包含部分视图的模式弹出窗口。这种片面的看法不过是形式。我必须在表单提交后使用新的部分视图更新/刷新相同的模式弹出窗口,而是使用该新视图重新加载主页(刷新浏览器)。
所以我希望所有流程都在同一个模态弹出窗口中,例如 - 创建员工---提交点击--->按顺序创建员工联系人等。这里员工和员工联系人被用作部分视图。
以下是表格 -
@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",new { employeeId = model.Employee.ID });
}
我也尝试过使用 PartialView 语法,但行为也相同(重新加载浏览器)-
return PartialView("~/Views/Employee/EmployeeContact.cshtml",new { employeeId = model.Employee.ID });
我缺少什么?
解决方法
我使用 DOMParser 解析 html 解决了这个问题。我使用了 DOMParser 并在 ajax 成功块之后提取了该 html 中可用的外部 js 文件。我从另一个 stackoverflow 链接获得的所有帮助 -
下面是我的代码 -
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");