0

我正在尝试根据第一个下拉列表(包含国家)中选择的内容填充第二个下拉列表(包含县)。

我有一个名为 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 将它返回到视图中?我想使用我发布的这个代码,因为它是唯一有效的。我只需要用正确的值交换硬编码值。那就是我遇到麻烦的地方。

请帮我。

4

2 回答 2

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

现在我会读你的文字墙^^

于 2011-08-17T17:15:42.563 回答
0

我自己解决了。我所做的是:

   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);

    }

而且效果很好。

于 2011-08-18T16:05:13.197 回答