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>

等....

これの理由はvalue、ドロップダウンのアイテムを 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 だけを取得するために 2 番目の呼び出しを行うことができると考えました...しかし、1 回だけ呼び出しを行いたいのです....

よろしくお願いします。

乾杯ロビン

.net、C#、js、jquery、Web サービス.....

ビリーの指導による解決策

以下の他の方法を使用した選択への追加は機能しませんでしたが、正しい変数を取得したら元の方法で機能したので、それを使用しました....

サービスは以下を返します。

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

...など

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

Webサービスにそれ(または少なくとも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 に答える