#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?