在MVC2中使用JSON填充下拉列表时未定义的对象

时间:2011-10-10 03:46:41

标签: c# asp.net-mvc drop-down-menu

我在制作两个下拉列表时遇到了一些麻烦:

  • 地区:所有地区
  • 城市:属于区域选定值的城市

一切都很好,直到City从JSON读取项目。下拉城市中的所有项目都是未定义

这是我的代码

$(document).ready(function () {
        $('#AreaList').change(function () {
            $.ajaxSetup({ cache: false });
            var selectedItem = $(this).val();
            if (selectedItem == "" || selectedItem == 0) {
                //Do nothing
            } else {
                $.ajax({
                    url: '<%=Url.Content("~/") %>Administration/GetDropDownCity',
                    data: { item: $("#AreaList> option:selected").attr("value") },
                    dataType: 'json',
                    traditional: true,
                    type: 'POST',
                    success: function (data) {
                        var items = "";
                $.each(data, function (i, data) {
                    items += "<option value='" + data.value + "'>" + data.description + "</option>";
                });
                $("#CityList").html(items);
                $("#CityList").removeAttr('disabled');
                    }
                });
            }
        });
    });

Json确实存在,我检查了Firebug并列出如下:

"[{\"value\":\"107\",\"description\":\"KOTA DEPOK\"},{\"value\":\"141\",\"description\":\"KOTA JAKARTA SELATAN\"}]"

解决这个问题的任何想法?

修改

问题解决了:我使用 jQuery.parseJSON()来读取JSON。

1 个答案:

答案 0 :(得分:0)

我不确定,但我认为变量在这里发生冲突

$.each(data, function (i, data) {
                    items += "<option value='" + data.value + "'>" + data.description + "</option>";
                });
枚举器中的

data更改为val,例如

$.each(data, function (i, val) {
                    items += "<option value='" + val.value + "'>" + val.description + "</option>";
                });

编辑还尝试提醒data[0].valuedata[0].description以确保在客户端正确解析json字符串,否则您可能需要致电$.parseJson返回的数据。

编辑2:您可以尝试的一件事是使用for循环

for(i=0;i<data.length;i++)
{
   items += "<option value='" + data[i].value + "'>" + data[i].description + "</option>";
}