如何使用c#webmethod动态填充选择

时间:2017-10-18 02:50:54

标签: c# jquery json

我正在使用https://selectize.github.io/selectize.js/ 我跟随他们的动态人口榜样

在我的aspx页面中我有

        $('#stationid').selectize({
        valueField: 'value',
        labelField: 'text',
        searchField: ['text'],
        create: function (input, callback) {
            $.ajax({
                url: 'Search.aspx/GetListboxValues',
                data: "{'query':'" + input+ "'}",
                type: 'POST',
                dataType: 'json',
                success: function (response) {
                    return callback(response);
                }
            });
        },
        render: {
            option: function (item, escape) {
                return '<div>' + escape(item.text) + '</div>';
            }
        },
        load: function (query, callback) {
            if (!query.length) return callback();
            $.ajax({
                type: "POST",
                url: "Search.aspx/GetListboxValues",
                data: "{'query':'" + query + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                error: function () {
                    callback();
                },
                success: function (res) {
                    callback(res);
                }
            });
        }
    });



<asp:ListBox ID="stationid" Width="300" SelectionMode="Multiple"  runat="server">
    </asp:ListBox>

在我的aspx.cs中我有

[WebMethod]
    public static string GetListboxValues(string query)
    {
        string _conString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection con = new SqlConnection(_conString);

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        string sql = "select station_name as [value], station_name as [text]  from station where station_name like '%" + query + "%' group by station_name order by station_name asc";

        cmd.CommandText = sql;
        con.Open();
        DataTable dt = new DataTable();

        using (var da = new SqlDataAdapter(cmd))
        {
            da.Fill(dt);

        }


        return JsonConvert.SerializeObject(dt);

    }

webmethod工作并以下列格式返回json

{&#34; d&#34;:&#34; [{\&#34;值\&#34;:\&#34; IM-987 \&#34; \&#34;文本\&#34;:\&#34; IM-987 \&#34;},{\&#34;值\&#34;:\&#34; S-2987 \&#34; \ &#34;文本\&#34;:\&#34; S-2987 \&#34;},{\&#34;值\&#34;:\&#34; S-987 \&# 34; \&#34;文本\&#34;:\&#34; S-987 \&#34;}]&#34;}

如果我输入列表框,那么选择添加我输入的内容并触发web方法,但列表框不会填充返回的json值。我怎么解决这个问题?提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果其他人有这个问题,那个怪异的问题就是json的格式错误了。 我需要使用eval函数来获取json中的文本,因为原始json具有所有那些“

所以就这样做

success: function (res) {
var rspns = eval(res.d); 
callback(rspns);
}