ASP.NET MVC - 表单提交后弹出更新模式

问题描述

我有包含部分视图的模式弹出窗口。这种片面的看法不过是形式。我必须在表单提交后使用新的部分视图更新/刷新相同的模式弹出窗口,而是使用该新视图重新加载主页(刷新浏览器)。

所以我希望所有流程都在同一个模态弹出窗口中,例如 - 创建员工---提交点击--->按顺序创建员工联系人等。这里员工和员工联系人被用作部分视图。

以下是表格 -

@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 链接获得的所有帮助 -

DOM Parser

下面是我的代码 -

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");