Asp.net-Mvc

AJAX 發布後視圖不刷新

  • January 1, 2021

我有一個帶有圖像連結的網格(Infragistics JQuery 網格)的視圖(Index.cshtml)。如果使用者點擊此連結,將呼叫以下 jquery 函式:

function ConfirmSettingEnddateRemarkToYesterday(remarkID) {

   //Some code...

   //Call to action.
$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID },  function (result) {
   //alert('Succes: ' + remarkID);
   //window.location.reload();
   //$('#remarksgrid').html(result);
});

}

註釋掉你可以看到我自己的警報和 2 次嘗試刷新視圖。location.reload() 有效,但對於瀏覽器來說基本上是太多的工作。.html(result) 在備註網格 div 中發布整個 index.cshtml + Layout.cshtml 雙倍。所以這是不正確的。

這是它呼叫的操作 (SetEnddateRemarkToYesterday):

      public ActionResult SetEnddateRemarkToYesterday(int remarkID) {

       //Some logic to persist the change to DB.

       return RedirectToAction("Index");
   }

這是它重定向到的操作:

[HttpGet]
public ActionResult Index() {
   //Some code to retrieve updated remarks. 
   //Remarks is pseudo for List<Of Remark>
   return View(Remarks);

}

如果我在成功的 AJAX 發布後不執行 window.location.reload,則視圖將永遠不會重新載入。我是 MVC 的新手,但我確信有更好的方法來做到這一點。我不了解這裡的基本內容。也許是朝著正確的方向輕推?先感謝您。

當您請求 AJAX 呼叫時,您應該使用其響應重定向

修改您的控制器以返回帶有登陸 url 的 JSONResult:

public ActionResult SetEnddateRemarkToYesterday(int remarkID) {
   //Some logic to persist the change to DB.
   var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Controller");
       return Json(new { Url = redirectUrl });
}

JS 呼叫:

$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID },  function (result) {
   window.location.href = result.Url
});

在 Ajax 發布後,您需要呼叫特定的 Url.. 像這樣.. window.location.href = Url

引用自:https://stackoverflow.com/questions/17742514