Js / Jquery绑定Datatable或Datalist

时间:2012-09-22 02:51:28

标签: c# javascript jquery .net datatable

方案

我有一个邮政编码输入框。当您输入邮政编码时,它会调用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;
        });

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/