MVC3 - отладка действия контроллера, вызванного вызовом Ajax - PullRequest
4 голосов
/ 02 декабря 2011

Я пытаюсь заполнить раскрывающийся список на основе значения, выбранного в другом раскрывающемся списке. Я использую пример этого парня , но пока не смог успешно его запустить. У меня успешный вызов 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();
    }
}

1 Ответ

4 голосов
/ 03 декабря 2011

вы должны достигнуть точки останова, если она делает это так далеко.я предполагаю, что вам нужно структурировать ваш объект, чтобы получить представление о json .net.или, поскольку это такой простой объект, просто сделайте что-то вроде:

 data: "{'id': '" + formData.Id + "'}"

Редактировать

, так как вы просто передаете идентификатор, технически вы можете просто использовать URL, чтобы добраться туда, где выхочу, не передавая данных вообще.вы бы просто сделали что-то вроде этого:

url: url + '/'+ formData.Id

это тесно связывает ваши маршруты и javascript, что не идеально, но оно выполняет свою работу.и это устраняет необходимость передавать какие-либо данные параметру данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...