Невозможно вызвать метод контроллера из js - PullRequest
0 голосов
/ 06 марта 2019
[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.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

У вас есть вид на это действие? Кроме того, это сообщение AJAX, вы не можете перенаправить на другое действие во время публикации AJAX. Попробуйте вернуть json из этого действия и посмотреть, работает ли оно.

return Json(new { true }, JsonRequestBehavior.AllowGet);
0 голосов
/ 07 марта 2019

Я пытался воспроизвести исходный код. У него были некоторые проблемы с текущим кодом.

Пропущена настройка для атрибута 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; }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...