У меня есть ajax-вызов API, который добавляет данные в базу данных, я хотел бы, чтобы функция успеха вызывала контроллер с методом действия, отличающимся от параметра, полученного из ответа на вызов API. Как мне это сделать
Аякс звонит
$.ajax({
//Url should contain the method you want to run
url: "/api/ApiTest",
//Method will be one of the REST API verb
method: "POST",
//These are all the parameters to be passed to method for rest api
data:viewModel,
dataType: 'json',
success: function (data) {
var bookingIDParam = data.Booking.BookingID
window.location.href = '@Url.Action("BookingInfo", "Booking", new { BookingID = bookingIDParam })';
},
error: function () {
alert("Error occured!!")
}
});
Я получаю сообщение об ошибке "Имя" bookingIDParam" не существует в текущем контексте
Как я могу вызвать другой контроллер/перейти к URL-адресу с методом действия с параметром из ответа.
Попробуйте установить некоторую фиктивную строку, чтобы заменить ее позже:
var url_redirect = '@Url.Action("BookingInfo", "Booking", new { BookingID = "00replace00" })';
$.ajax({
....
success: function (data) {
url_redirect = url_redirect.replace("00replace00", data.Booking.BookingID );
window.location.href =url_redirect ;
},
Вы не можете; по крайней мере, не так, как вы пытаетесь. Все действия на стороне сервера происходят до того, как последняя страница будет доставлена клиенту. Вызов AJAX происходит после этого, и ответ AJAX происходит даже после этого. Вам нужно будет настроить URL-адрес с помощью javascript. Вы можете просто сделать что-то вроде
new { BookingID = "REPLACEME" }
в коде бритвы, а затем, когда вы получите ответ AJAX, заменить REPLACEME в результирующем URL-адресе значением из ответа AJAX. Взгляните на эту строку в браузере, если она сбивает с толку. Вы увидитеwindow.location.href = 'some real URL';
.