Невозможно вызвать метод контроллера из js

[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.

Какой полный URL запрашивается? Какой метод действия на каком контроллере вы ожидаете достичь и почему?

David 06.03.2019 14:13

Я пытаюсь загрузить несколько маркеров на карту, пока карта перетаскивается или перемещается. Имя контроллера: «Home», действие: «mapchanged».

Deepak Verma 06.03.2019 14:16

Итак, какой запрос возвращает ошибку 404? Каков URL-адрес для этого запроса и какое действие контроллера вы ожидаете от этого URL-адреса? Похоже, вы делаете здесь два запроса: один к mapchanged и один к search. Вы должны выяснить, какой из них терпит неудачу.

David 06.03.2019 15:01

Примечание: async: false — плохая идея. Ваш браузер, вероятно, предупреждает вас об этом в консоли. Браузеры, скорее всего, прекратят его поддержку, если они уже этого не сделали, и его использование противоречит шаблонам и практикам JavaScript.

David 06.03.2019 15:02

Я удалил "return RedirectToAction("search?what=&by=bnm");" и отметил точку останова в начале с "mapchanged", но мой элемент управления не достигает точки останова.

Deepak Verma 06.03.2019 15:12

Вам действительно нужно предоставить более полное описание проблемы. Каково значение url в вашем текущем коде? В средствах отладки вашего браузера какой полный URL-адрес запрашивается? Какой ответ сервера? Если этот URL-адрес приводит к ошибке 404, почему вы думаете, что этого не должно быть?

David 06.03.2019 15:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
229
2

Ответы 2

У вас есть представление об этом действии? Кроме того, это пост 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; }
        }

Другие вопросы по теме