0

设想

我有一个邮政编码输入框。当您输入邮政编码时,它会调用 Web 服务并取回所有郊区名称并将它们绑定到一个列表,例如输入下拉列表。

当我List<string>从 Web 服务返回一个名称时,这很有效。没问题。

当我将值保存到数据库时出现问题。当它被保存时,我无法在数据库的郊区列中保存郊区的名称。我必须为外键约束保存那个郊区的 id。

所以然后我稍微改变了List<>事情并作弊并返回了以下内容。

<ArrayOfString>
<string>8213</string>
<string>BROOKFIELD</string>
<string>8214</string>
<string>CHAPEL HILL</string>
<string>8215</string>
<string>FIG TREE POCKET</string>

ETC....

这样做的原因是,我可以value将下拉列表中的项目的 id 作为 id,因此可以将其保存在保存后的代码中。

为此,我执行了以下操作:

$(result).each(function (index, value) {

            var suburbname;

            var pattern = new RegExp('[0-9*]');
            var m = pattern.exec(value);

            if (m == null) {
                suburbname = value

                var o = new Option(suburbname, suburbid);
                /// jquerify the DOM object 'o' so we can use the html method
                $(o).html(suburbname);
                $(document.getElementById('<%= suburb.ClientID %>')).append($("<option></option>")
                                                                .attr("value", suburbid)
                                                                .text(suburbname));

            }
            else {
                suburbid = value
            }

这也有效......下拉列表只有名称,而这些值是数字

问题....?

我在做我不喜欢的假设...即名称永远不会有数字,Web 服务将始终首先返回 id 以在第一次运行添加到下拉列表之前设置 id。只是感觉不对……:S(想法?)

因此,如果我将 Web 服务更改为返回数据表,则显示以下内容(这是整个查询返回的内容):

<Suburbs diffgr:id="Suburbs1" msdata:rowOrder="0">
<SuburbID>8213</SuburbID>
<SuburbName>BROOKFIELD</SuburbName>
<StateID>4</StateID>
<StateCode>07</StateCode>
<CountryCode>61</CountryCode>
<TimeZones>10.00</TimeZones>
<Postcode>4069</Postcode>
</Suburbs>

有没有办法在 js/jquery. 因此,当用户输入邮政编码时,Web 服务返回数据表,然后将其绑定到选择,其中 SuburbID 进入value,名称进入文本???

还有其他方法可以从 Web 服务返回数据来解决这个问题吗?

注意:基本上我需要看起来像这样的选项:

<option value="8213">BROOKFIELD</option>

我还想我可以打第二个电话来获取文本绑定上的 id ......但我有点想只打一个电话......

非常感谢,

干杯罗宾

.net、C#、js、jquery、网络服务......

在比利的指导下解决

使用下面的其他方法添加到选择中不起作用,但是一旦我有了正确的变量,我的原始方法就可以了,所以就使用它....

服务返回:

<ArrayOfMyClass>
<MyClass>
<ID>8213</ID>
<Name>BROOKFIELD</Name>
</MyClass>

... ETC

js是:(注意:它是onchange邮政编码输入框。它运行一个Web服务,然后成功运行以下)

function OnCompleted(result) {

        var _suburbs = result;
        var i = 0;

        $(_suburbs).each(function () {
            var SuburbName = _suburbs[i].Name;
            var SuburbID = _suburbs[i].ID;

            $(document.getElementById('<%= suburb.ClientID %>')).append($("<option></option>")
                                                               .attr("value", SuburbID)
                                                                .text(SuburbName));
            i = i + 1;
        });
4

1 回答 1

0

您可以让您的网络服务返回它(或任何至少包含 id 和名称的子集):

<Suburbs diffgr:id="Suburbs1" msdata:rowOrder="0">
<SuburbID>8213</SuburbID>
<SuburbName>BROOKFIELD</SuburbName>
<StateID>4</StateID>
<StateCode>07</StateCode>
<CountryCode>61</CountryCode>
<TimeZones>10.00</TimeZones>
<Postcode>4069</Postcode>
</Suburbs>

比使用你的 javascript foreach 像这样:

var root = $('#<%= suburb.ClientID %>');

$(result).each(function (index, value) {

    var row = $(value)[0];

    $('<option></option>')
        .attr('value', $('SuburbID', row).text())
        .text($('SuburbName', row).text())
        .appendTo(root);
}​);

编辑:这是一个 jsfiddle:http: //jsfiddle.net/rRqJa/2/

于 2012-09-22T04:15:16.373 回答