Сообщение Ajax и перенаправление с использованием значения модели MVC4

63
9

Я отправляю страницу через сообщение agax с данными json, а затем перенаправляюсь на другое представление. Он отлично работает.


 $.ajax({
url: '/bus/result',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: ko.toJSON(bookingInfo),
success: function (data, textStatus, xhr) {
window.location.href = data.redirectToUrl;
}
});

Контроллер MVC


[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Result(BusBookingInfo bookingInfo)
{
if (Request.IsAjaxRequest())
{
return Json(new { redirectToUrl = Url.Action("Booking") });
}

//return Redirect("/bus/booking/");
return RedirectToAction("result");
}


Но теперь я хотел передать объект bookingInfo в режим бронирования. Я знаю, что могу пройти через строку запроса, но можно привязать этот вид резервирования объекта модели?

спросил(а) 2021-01-25T18:40:17+03:00 4 месяца, 3 недели назад
1
Решение
63

Вместо window.location.href при успешном обратном вызове


success: function (data, textStatus, xhr) {
window.location.href = data.redirectToUrl;
}

Вы можете сделать другой вызов ajax/$.post здесь и передать свой объект с помощью метода POST.

$.ajax({
url: '/bus/result',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: ko.toJSON(bookingInfo),
success: function (data, textStatus, xhr) {
$.post(data.redirectToUrl, bookingInfo, function(){
//TODO: callback
});
}
});

Update:
Возможно, TempData dictioanry может быть полезной здесь...


[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Result(BusBookingInfo bookingInfo)
{
if (Request.IsAjaxRequest())
{
TempData["ViewModelItem"] = bookingInfo;
return RedirectToAction("Booking");
}
//return Redirect("/bus/booking/");
return RedirectToAction("result");
}

public ActionResult Booking()
{
var bookingInfo = (BusBookingInfo)TempData["ViewModelItem"];
//TODO: code
}

ответил(а) 2021-01-25T18:40:17+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема