[HttpPost]
[Route("mapchanged")]
public ActionResult mapchanged(string latitud, string longitud)
{
Session["Latitude"] = latitud;
Session["Longitude"] = longitud;
return RedirectToAction("search?what=&by=bnm");
}
$.ajax({
type: "POST",
async: false,
url: url, // '@Url.Action("mapchanged")',
data: {
latitud: map.getCenter().lat(),
longitud: map.getCenter().lng()
},
dataType: "json",
contentType: 'application/json; charset=utf-8',
cache: false,
success: function(data) {
alert('Success');
},
error: function(err) {
alert('error = ' + err.status);
}
});
Код выше не работает - выдает ошибку 404. Тоже пробовал var url = '"Home/mapchanged/"' но тоже не работает. Код ajax находится в файле map.js.
Я пытаюсь загрузить несколько маркеров на карту, пока карта перетаскивается или перемещается. Имя контроллера: «Home», действие: «mapchanged».
Итак, какой запрос возвращает ошибку 404? Каков URL-адрес для этого запроса и какое действие контроллера вы ожидаете от этого URL-адреса? Похоже, вы делаете здесь два запроса: один к mapchanged и один к search. Вы должны выяснить, какой из них терпит неудачу.
Примечание: async: false — плохая идея. Ваш браузер, вероятно, предупреждает вас об этом в консоли. Браузеры, скорее всего, прекратят его поддержку, если они уже этого не сделали, и его использование противоречит шаблонам и практикам JavaScript.
Я удалил "return RedirectToAction("search?what=&by=bnm");" и отметил точку останова в начале с "mapchanged", но мой элемент управления не достигает точки останова.
Вам действительно нужно предоставить более полное описание проблемы. Каково значение url в вашем текущем коде? В средствах отладки вашего браузера какой полный URL-адрес запрашивается? Какой ответ сервера? Если этот URL-адрес приводит к ошибке 404, почему вы думаете, что этого не должно быть?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас есть представление об этом действии? Кроме того, это пост ajax, вы не можете перенаправить на другое действие во время поста ajax. Попробуйте вернуть json из этого действия и посмотрите, работает ли оно.
return Json(new { true }, JsonRequestBehavior.AllowGet);
Я попытался воспроизвести исходный код. У него были некоторые проблемы с текущим кодом.
Пропущена настройка атрибута Route в классе RouteConfig, без этой настройки аннотация/атрибут [Route] не работает.
routes.MapMvcAttributeRoutes()
В вызове ajax не использовался JSON.stringify для данных
var data = {
latitud: map.getCenter().lat(),
longitud: map.getCenter().lng()
};
$.ajax({
type: "POST",
async: false,
url: '@Url.Action("mapchanged")',
data: JSON.stringify(data),
dataType: "json",
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
alert('Success');
window.location.href = data.url;
},
error: function (err) {
alert('error = ' + err.status);
}
});
Вы должны вернуть объект Json со свойством url вместо RedirectToAction
[HttpPost]
[Route("mapchanged")]
public ActionResult mapchanged(LongLat obj)
{
Session["Latitude"] = obj.latitud;
Session["Longitude"] = obj.longitud;
//return RedirectToAction("search?what=&by=bnm");
return Json(new {url = "search?what=&by=bnm"});
}
public class LongLat
{
public double latitud { get; set; }
public double longitud { get; set; }
}
Какой полный URL запрашивается? Какой метод действия на каком контроллере вы ожидаете достичь и почему?