方案
我有一个邮政编码输入框。当您输入邮政编码时,它会调用Web服务并返回所有郊区名称并将它们绑定到列表,如输入下拉列表。
当我从Web服务返回List<string>
仅用于名称时,这是有效的。没问题。
当我将值保存到db时出现问题。当它被保存时,我无法在db的郊区列中保存郊区的名称。我必须为外键约束保存该郊区的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
}
这也有效......下拉列表只有名称,而那些值就是数字
问题....?
我正在做出我不喜欢的假设... I.e.该名称永远不会有一个数字,在第一次运行添加到下拉列表之前,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中是否有与上述相同的方法。因此,当用户输入邮政编码时,webservice返回数据表,然后将其绑定到选择,SuburbID进入value
,名称将进入文本???
我可以通过其他方式从Web服务返回数据来解决这个问题吗?
注意:基本上我需要选项看起来像这样:
<option value="8213">BROOKFIELD</option>
我还以为我可以再次拨打电话来获取文本绑定中的id ...但我只想打一个电话....
非常感谢,
干杯 罗宾
.net,C#,js,jquery,web service .....
在Billy的指导下解决方案
使用下面的其他方法添加到选择中不起作用,但是我原来的方式一旦我有了正确的变量就这样使用了....
服务返回:
<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;
});
答案 0 :(得分: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/