Ошибка заполнения выпадающего списка с помощью AJAX

#javascript #jquery #ajax #model-view-controller

#javascript #jquery #ajax #модель-представление-контроллер

Вопрос:

Я хочу заполнить выпадающий список с помощью AJAX в моем проекте MVC. При этом «Сетевые» средства отладки показывают 404 при поиске моего URL-адреса и всегда попадают в функцию ошибки моего вызова AJAX.

Мой Javascript, который размещен в нижней части моего представления, выглядит следующим образом:

 function PopulateTournamentDropdown() {
        $.ajax({
            url: '/Leaderboard/PopulateTournamentDropDownList',
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                var ddlTournament = $("#ddlTournament");
                ddlTournament.empty();
                $.each(data, function (i, tournament) {
                    ddlTournament.append('<option value="'   tournament.Id   '">'   tournament.Name   '</option>');
                });
            },
            error: function () {
                alert('Failed to retrieve tournament.');
            }
        });
    }

    $(function () {

        $('#ddlTournament').change(PopulateTournamentDropdown);
        PopulateTournamentDropdown();
    });
  

Мой контроллер выглядит следующим образом:

 public class LeaderboardController : Controller
    {
        public static string PopulateTournamentDropDownList()
        {
            var list = GetTournamentDetails();
            return JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented, JsonSetting);
        }
}
  

На данный момент метод в контроллере никогда не выполняется.

Пожалуйста, помогите.

Комментарии:

1. Я не уверен, но разве вы не пропустили List '/Leaderboard/PopulateTournamentDropdown' ? Должно быть '/Leaderboard/PopulateTournamentDropdownList'

2. Я извиняюсь. Я скопировал неправильно. У меня есть список, включенный в URL.

Ответ №1:

Я думаю, проблема в том, что действие является статическим методом. Можете ли вы попробовать это:

 public class LeaderboardController : Controller
{
    public ActionResult PopulateTournamentDropDownList()
    {
        var list = GetTournamentDetails();
        return Content(JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented, JsonSetting), "application/json");
    }
}
  

Комментарии:

1. Это сработало. У меня сложилось впечатление, что все методы в MVC, которые возвращали ActionMethod, должны были возвращать представления. Content () — это новая концепция для меня. Спасибо!

Ответ №2:

Метод действия контроллера должен иметь следующую подпись:

 public ActionResult PopulateTournamentDropDownList()
{
  ...
}
  

Обратите внимание, что это метод экземпляра (не статический).

Комментарии:

1. Итак, чтобы выполнить любой вызов AJAX в MVC, я должен вернуть ActionResult, который должен будет возвращать строку? Есть ли какой-либо способ вернуть JsonResult или строку JSON через AJAX в MVC?