Просмотр не обновляется после публикации AJAX
У меня есть view (Index.cshtml) с сеткой (сетка JQuery для Infragistics) с imagelink. Если пользователь нажимает на эту ссылку, будет вызвана следующая функция 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) отправляет весь файл index.cshtml + Layout.cshtml в div div. Так что это неверно.
Это действие, которое он вызывает (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);
}
Если я не сделаю window.location.reload после сообщения succesfull AJAX, представление никогда не перезагрузится. Я новичок в MVC, но я уверен, что есть лучший способ сделать это. Я не понимаю здесь ничего принципиального. Возможно, толчок в правильном направлении? Заранее благодарю вас.
Ответы
Ответ 1
Когда вы запрашиваете вызов AJAX, вы должны перенаправить его ответ
Измените свой контроллер, чтобы вернуть JSONResult с URL-адресом для посадки:
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
});
Ответ 2
После сообщения Ajax вам нужно позвонить на конкретный адрес.
как это..
window.location.href= Url
Ответ 3
При использовании jQuery.post новая страница возвращается с помощью метода .done
jQuery
jQuery.post("Controller/Action", { d1: "test", d2: "test" })
.done(function (data) {
jQuery('#reload').html(data);
});
HTML
<body id="reload">