Как вернуть соответствующие результаты с помощью JSON для заполнения каскадных выпадающих списков?

Я пытаюсь заполнить второй раскрывающийся список (который содержит округа) в зависимости от того, что выбрано в первом раскрывающемся списке (который содержит страны).

У меня есть действие контроллера под названием GetCounties:

  public JsonResult GetCounties(string id)
    {
        DBEntities dc = new DBEntities();
        JsonResult result = new JsonResult();
        var filteredDivisions = from div in dc.Divisions
                                where div.CountryID == 1 //id
                                select div;
        result.Data = filteredDivisions.ToList();        
        return Json(result.Data, JsonRequestBehavior.AllowGet);          

        //         return Json(new[] {
        //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
        //    new { Id = 2, Value = "value 2" },
        //    new { Id = 3, Value = "value 3" },
        //}, JsonRequestBehavior.AllowGet);
    }

Обратите внимание на закомментированный раздел. Это отлично работает для меня (я получаю первое значение из списка подразделений, а два других называются «значение 2» и «значение 3». Я использовал это для проверки обратного вызова, но это было единственное, что дало мне результаты.

 return Json(result.Data, JsonRequestBehavior.AllowGet);     

ничего не достигает со стороны просмотра. При отладке все правильные значения есть, но они не появляются в раскрывающемся списке на стороне просмотра. Как я уже сказал, единственные результаты, которые я получаю, — это использование закомментированного кода (жестко закодированные значения, которые, конечно, недостаточно хороши). Я пытался использовать циклы for для перебора списка, чтобы заполнить массив, но ничего не работает, я получаю ошибки, например, анонимный тип доступен только для чтения, поэтому я не могу установить его снова.

Это мой код jquery:

  $(function () {
            $.getJSON('/Entity/GetCounties', function (result) {
                var ddl = $('#DivisionsList');
                ddl.empty();
                $(result).each(function () {
                    $(document.createElement('option'))
            .attr('value', this.Id)
            .text(this.Value)
            .appendTo(ddl);
                });
            });
        });

Список дивизионов, конечно же, представляет собой раскрывающийся список со всеми округами, который с помощью приведенного выше оператора возврата без комментариев просто возвращает без изменений, т.е. содержит ВСЕ свои значения, а не только те, которые должны появиться в зависимости от выбранной страны. поэтому, пожалуйста, КАК Я МОГУ ЗАПОЛНИТЬ МАССИВ ОТФИЛЬТРОВАННЫМИ РЕЗУЛЬТАТАМИ, ЧТОБЫ Я МОГУ ВЕРНУТЬ ЕГО В ПРЕДСТАВЛЕНИЕ С ИСПОЛЬЗОВАНИЕМ JSON? Я хочу использовать ЭТОТ код, который я разместил, так как он был ЕДИНСТВЕННЫМ, который когда-либо работал. Мне просто нужно поменять жестко заданные значения на правильные. вот где у меня проблемы.

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


person dumbfreak    schedule 17.08.2011    source источник


Ответы (2)


$.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) {

а теперь я прочитаю вашу стену текста ^^

person roselan    schedule 17.08.2011

Я решил это сам. Что я сделал, так это:

   public JsonResult GetDivisions(int id)
    {
        ASNEntities dc = new ASNEntities();
        JsonResult result = new JsonResult();
        var filteredDivisions = from div in dc.Divisions
                                where div.CountryID == id
                                select div;

        List<object> listToReturn = new List<object>();

        for (int i = 0; i < filteredDivisions.Count(); i++)
        {
            Object[] obj = new[]{
             new { Id = filteredDivisions.ToArray()[i].DivisionID, Value = filteredDivisions.ToArray()[i].DivisionName },
        };

           listToReturn.Add(obj[0]);              
        }

        return Json(listToReturn.ToArray(), JsonRequestBehavior.AllowGet);

        //return Json(new[] {
        //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
        //    new { Id = 2, Value = "value 2" },
        //    new { Id = 3, Value = "value 3" },
        //}, JsonRequestBehavior.AllowGet);

    }

и это прекрасно работает.

person dumbfreak    schedule 18.08.2011