シナリオ
郵便番号の入力ボックスがあります。郵便番号を入力すると、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;
});