我有一个webservice函数,它返回如下内容:
此数据来自以下功能:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string[] GetCitiesWithState(string isoalpha2, string prefixText)
{
var dict = AtomicCore.CityObject.GetCitiesInCountryWithStateAutocomplete(isoalpha2, prefixText);
string[] cities = dict.Values.ToArray();
return cities;
}
效果非常好,但我真正需要的是就是这样的列表:
使用#作为城市ID(包含dict
,其类型为:Dictionary<int, string>
)。
我这样做的原因是因为我有一些Jquery读取ASMX服务和这个方法,我需要能够看到所选城市的城市ID。为了清晰起见,这是我的Jquery(目前有效):
$('#<%=txtCity.ClientID%>').autocomplete({
source: function (request, response) {
var parameters = {
isoalpha2: '<%=Session["BusinessCountry"].ToString()%>',
prefixText: request.term
};
$.ajax({
url: '<%=ResolveUrl("~/AtomicService/Assets.asmx/GetCitiesWithState")%>',
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(parameters),
success: function (data) {
response($.each(data.d, function (index, value) {
return {
label: value,
value: index
}
}));
}
});
},
select: function (event, ui) {
$('#<%=txtState.ClientID%>').val(ui.value);
},
minLength: 2,
delay: 500
});
最后,我实际想要实现的是当用户选择悬挂在$('#<%=txtCity.ClientID%>')
的自动完成中的城市时,我希望Jquery将值分开(例如路易斯安那州的新奥尔良)两个(新奥尔良)和(路易斯安那州)),然后我喜欢'新奥尔良'作为$('#<%=txtCity.ClientID%>')
和'路易斯安那'的价值成为$('#<%=txtState.ClientID%>')
的价值...任何帮助获得这种疯狂的工作总是受到赞赏:)
答案 0 :(得分:3)
如果我清楚地了解你,你只需要以不同的方式从WebMethod返回数据:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string[] GetCitiesWithState(string isoalpha2, string prefixText)
{
var dict = AtomicCore.CityObject.GetCitiesInCountryWithStateAutocomplete(isoalpha2, prefixText);
string[] response = dict.Select(x => String.Format("{0}, {1}", x.Key, x.Value)).ToArray();
return response;
}
现在,在JavaScript方面,您需要手动将字符串拆分为index
和label
(因为index
现在只是一个行号,我相信)。这样的东西(只是草稿):
response($.each(data.d, function (index, value) {
return {
label: value.slice(value.indexOf(',')),
value: parseInt(value.split(',')[0])
}
}));