转换键和&amp; Dictionary <int,string =“”>中的值到String [] Array </int,>

时间:2011-04-16 12:27:08

标签: c# web-services jquery-ui

我有一个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;
}

效果非常好,但我真正需要的是就是这样的列表

  • 12,路易斯安那州新奥尔良
  • 22,纽约,纽约
  • 48,Newark,New Jersey

使用#作为城市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%>')的价值...任何帮助获得这种疯狂的工作总是受到赞赏:)

1 个答案:

答案 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方面,您需要手动将字符串拆分为indexlabel(因为index现在只是一个行号,我相信)。这样的东西(只是草稿):

response($.each(data.d, function (index, value) {
    return {
        label: value.slice(value.indexOf(',')),
        value: parseInt(value.split(',')[0])
     }
 }));