在Asp.net HTML控件中动态获取城市

时间:2015-01-21 04:11:55

标签: c# jquery html asp.net ajax

我有一个国家的HTML下拉列表。现在我想使用ajax

相应地填充City下拉列表
<select class="form-control" id="ddCountry" runat="server" tabindex="8"></select>

<select class="form-control" id="ddCity" runat="server" tabindex="9"></select>

<script type="text/javascript">
        $('#ddCountry').on('change', function () {

            var storeData = { countryId: this.value }

            $.ajax({
                type: "POST",
                url: "UserRegistration.aspx/GetCities",
                data: JSON.stringify(storeData),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    alert("The data in list is "+data);
                },
                error: error
            });
        });
    </script>

我在.cs页面上的方法如下:

[WebMethod]
        public static List<CityBO> GetCities(string countryId)
        {
             //returning cities
        }

问题是我能够在GetCities方法中获取数据但是无法在ddCity列表中显示它,因为它是一个HTML控件而且方法是静态的,所以

ddCity.Items.AddRange(list_of_countries)无效,因为静态方法无法识别ddCity。请告诉我们如何填写下拉列表。

2 个答案:

答案 0 :(得分:2)

您无法以静态方法访问控件。你需要从webmethod返回城市列表并使用javascript填充下拉列表。在ajax的成功方法中写这样的代码。

success: function (data) {
    fillDropDown(data.d);
}

function fillDropDown(data){
    var html = "";
    for (var i = 0; i < data.length; i++)
    {
          html += "<option value='" + data[i].ValueField+ "'>" + 
                   data[i].TextField+ "</option>";
    }
     $("select[id$=ddlCity]").html(html);
}

答案 1 :(得分:1)

您可以使用下面给出的ajax成功函数。

success: function (data) 
{
 var lankanListArray = JSON.parse(data.d);
 // running a loop
 $.each(lankanListArray, function (index, value) 
 {
  $("#ddlCity").append($("<option></option>").val(this.name).html(this.value));              
 });
}