Я пытаюсь заполнить раскрывающийся список на основе значения, выбранного в другом раскрывающемся списке. Я использую пример этого парня , но пока не смог успешно его запустить. У меня успешный вызов Ajax, который запускается при событии изменения родительского выпадающего списка. Я проверил, что данные, переданные в функцию Ajax, верны. Тем не менее, результатом является ошибка (200; неожиданный символ в результате JSON). Я пытался выяснить, как отлаживать а) действие контроллера, которое вызывается при вызове Ajax, и б) функцию, которая передает список результатов в действие контроллера. Кто-нибудь может помочь мне разобраться, как отлаживать а) и б)? Кажется, Visual Studio 2010 не предлагает большой помощи для отладки целей вызовов Ajax.
Вот код, который у меня есть:
1) Действие контроллера (BreedController), которое вызывает функцию вспомогательного класса списка для предположительного возврата объекта JSON обратно к успешному обратному вызову Ajax.
//
// Retrieve JSON object containing breeds for a given species
//
[HttpPost]
public JsonResult BreedsBySpecies(int? id)
{
ListHelper lh = new ListHelper();
return Json(new { items = lh.GetBreedsBySpecies(id) }, JsonRequestBehavior.AllowGet);
}
2) Функция, которая должна возвращать SelectItemList пород с заданным идентификатором вида. Это вызывается действием контроллера.
public List<SelectListItem> GetBreedsBySpecies(int? speciesID)
{
var breed = from b in db.Breeds
select b;
if (speciesID.HasValue)
{
breed = breed.Where(b => b.SpeciesID == speciesID);
}
List<SelectListItem> lst = new List<SelectListItem>();
foreach (var item in breed)
{
lst.Add(new SelectListItem { Text = item.Description, Value = item.BreedID.ToString() });
}
return lst;
}
3) Функция javascript, которая вызывает Ajax. Я подтвердил, что он получает правильные значения (например, "/ Breed / BreedsBySpecies", чтобы перейти к нужному действию контроллера, а formData содержит правильный идентификатор вида)
function selectFromAjax(url, formData, target) {
$(target).html("");
if (formData.id) {
$.ajax({
type: 'POST',
url: url,
data: formData,
dataType: 'text json',
contentType: 'application/json; charset=utf-8',
success: function (data, textStatus) {
if (data) {
$(data.items).each(function () {
$(target).append($("<option></option>").attr("value", this.Value).text(this.Text));
});
$(target).change();
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
else {
$(target).change();
}
}