點擊Button refresh form return json

工作上遇到了  需要點及儲存之後   refresh form 的問題

這時候問了神人  主管 

立馬解決了問題  

 

 

重點就是  先再 你要post 的method  return json的地方多傳一個字串(放入你要執行的js)

之後在前端 ajax 去接收並且執行js

-----------------------action的地方放上 

 form  submit 的jquery   returnScript = "$(\"#form_BSP001Execute\").submit();";  藍色是要submit的form id

return Json(new { success = true, returnScript});

--------------------------view的地方ajax要調整

 success: result => {
                if (result.success) {
                    popUp.hide();
                    
                    if (result.returnScript) {
                        console.log(result);
                        eval(result.returnScript);
                    }//執行那個returnScript 指令

                    loadPanel.hide()

                    if (callback) {
                        callback("資料存檔成功!", result["key"]);
                    }

                }

去執行 就完成了

 

-----------------------------------------------------------------------下面是寫給自己看----------------------大家可以略過-----------------------------------------------------------------------

 

 

step 1.

controller var  string returnScript = "";

  returnScript = "$(\"#form_BSP001Execute\").submit();";

  return Json(new { success = true, returnScript});

step 2.

  var instance = $("div.dxLoadPanel").dxLoadPanel("instance");
    return instance;   

途中發現 上面這兩行code 會跳出錯誤  阻礙我們  神人主管用了下面方法 排除錯誤

  try {
        var instance = $("div.dxLoadPanel").dxLoadPanel("instance");
        return instance;
    }
    catch (ex) {
        var instance = { show: function () { }, hide: function () { } };
        return instance;
    }

有問題就 塞假的Instance

step3 重頭戲來了

function CreateLoadingPanel(message) {
    if ($("div.dxLoadPanel").length == 0) {
        $("<div/>", { class: "dxLoadPanel" }).appendTo("body"), { shading: true, shadingColor: "argb(0, 0, 0, 0.5)" };
        $("div.dxLoadPanel").dxLoadPanel({
            shading: true,
            shadingColor: "argb(0, 0, 0, 0.5)",
            message: message || "資料讀取中..."
        });
    }

 return $.ajax({
        method: "post",
        url: url ? url : $(element).attr("action"),
        data: $(element).serialize(),
        success: function (data) {
            $("#" + $(element).data("target")).html(data);
            loadPanel.hide();
        },
        error: function (err) {
            loadPanel.hide();
            DevExpress.ui.dialog.alert("<i class=\"fa fa-exclamation-circle fa-5x error text-danger \"></i><span class=\"error\">" + err.responseText + "</span>", "發生錯誤");
        }

上面這邊改成下面這樣  

    return $.ajax({
        method: "post",
        url: url ? url : $(element).attr("action"),
        data: $(element).serialize(),
        success: function (data) {
            $("#" + $(element).data("target")).html(data);
        },
        error: function (err) {
            DevExpress.ui.dialog.alert("<i class=\"fa fa-exclamation-circle fa-5x error text-danger \"></i><span class=\"error\">" + err.responseText + "</span>", "發生錯誤");
        }
    }).done(function () {
        loadPanel.hide();

    });

 

 $.ajax({
            url: url,
            data: postData,
            method: "post",
            success: result => {
                if (result.success) {
                    popUp.hide();
                    loadPanel.hide()
                    if (callback) {
                        callback("資料存檔成功!", result["key"]);
                    }

改成下面這樣

   $.ajax({
            url: url,
            data: postData,
            method: "post",
            success: result => {
                if (result.success) {
                    popUp.hide();
                    
                    if (result.returnScript) {
                        console.log(result);
                        eval(result.returnScript);
                    }    //上面這邊去接json 傳的script   並且執行他  eval(result.returnScript)

                    loadPanel.hide()

                    if (callback) {
                        callback("資料存檔成功!", result["key"]);
                    }

                } else {
                    popUp.content().find("form.ajax").replaceWith(result);
                    preparePopup(popUp, url, callback);
                    loadPanel.hide();
                    DevExpress.ui.notify("請先修正資料", "error", 5000);
                }
            },

歡迎高手低手來看看 指教指教 切磋切磋 教學香腸