我正在使用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值。我怎么解决这个问题?提前谢谢!
答案 0 :(得分:0)
如果其他人有这个问题,那个怪异的问题就是json的格式错误了。 我需要使用eval函数来获取json中的文本,因为原始json具有所有那些“
所以就这样做
success: function (res) {
var rspns = eval(res.d);
callback(rspns);
}