Как вернуть соответствующие результаты с JSON, чтобы заполнить каскадные выпадающие списки? - PullRequest
0 голосов
/ 17 августа 2011

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

У меня есть действие контроллера под названием 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? Я хочу использовать ЭТОТ код, который я опубликовал, так как это был ЕДИНСТВЕННЫЙ, который когда-либо работал. Мне просто нужно поменять жестко закодированные значения на правильные. вот где у меня проблемы.

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

Ответы [ 2 ]

0 голосов
/ 18 августа 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);

    }

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

0 голосов
/ 17 августа 2011
$.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) {

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

...