Arraylist和webmethod

时间:2011-03-24 12:50:25

标签: asp.net jquery asp.net-ajax

我在ASP.net中编写了一个Web方法,它的输出是从Sql server数据库读取的城市ArrayList。 在客户端使用Jquery调用此webmethod。 但我不知道如何使用jquery读取数组列表的每个项目。例如每个城市和它的id等同。 以下是我的Webmethod:

public ArrayList showcity(int s)
    {
            ArrayList list = new ArrayList();
            String strConnString = ConfigurationManager
                .ConnectionStrings["ConnectionCS"].ConnectionString;
            String strQuery = "select ID, City from tbl_city where stateid=@s";
            using (SqlConnection con = new SqlConnection(strConnString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@s", s);
                    cmd.CommandText = strQuery;
                    cmd.Connection = con;
                    con.Open();
                    SqlDataReader sdr = cmd.ExecuteReader();
                    while (sdr.Read())
                    {
                        list.Add(new ListItem(
                       sdr["City"].ToString(),
                       sdr["ID"].ToString()
                        ));
                    }
                    con.Close();
                   return list;
                }
            }

这是我的客户代码:

function showcity() {
        $.ajax(
    { url: "../AjaxServices/StateCity.asmx/showcity",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: "POST",
        data: '{s: ' + $('#<%=DpState.ClientID%>').val() + '}',
        success: function(data) {
             ***// what should I write here to access every item separately*** 
          },
        error: function() { alert("Error"); }
    })
}

如果我使用alert(data.d)我会得到[对象] [对象] [对象] [对象],.....

3 个答案:

答案 0 :(得分:2)

您需要创建一个实际类型并返回该类型的数组。因此,创建一个City类,将其标记为可序列化,在循环中构建List<City>,然后返回.ToArray()。您的网络方法的返回类型应为City []

答案 1 :(得分:0)

而不是返回ArrayList,最好返回一个具有二维的数组。

答案 2 :(得分:0)

我自己找到了一个解决方案,所以我在这里分享一下,请注意ValueText他们是区分大小写的

 success: function(data) {
                $.each(data.d, function() {
                    alert(this['Value'] + ':' + this['Text']);
                })
            }