1

我正在做一个项目,我成功地通过 ajax 进行 Web 服务调用,返回数据,并将单行结果绑定到文本框。但是,在某些情况下,诸如帐户之类的字段可能具有多个值,并且在我的情况下已被索引。我可以对返回的结果进行硬编码并绑定它,但我需要动态地进行而不是硬编码,因为 Web 服务调用可能会根据提供给它的数据返回不同数量的行。这是一些代码:

 function RetrieveEntity() {
 var pageUrl1 = "ajaxwebservicecalls.asmx/RetrieveEntity";
    $.ajax({
        type: "POST",
        url: pageUrl1,
        data: {},
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: OnretrieveSuccessCall,
        error: onretrieveFail
    });


}
function OnretrieveSuccessCall(msg) {
    var defaultdata = msg.d.Data;
    invoiceModel = defaultdata;
    var x = JSON.stringify(defaultdata);
    MyProject.viewModel = ko.mapping.fromJS(invoiceModel);
    ko.applyBindings(MyProject.viewModel)
alert("hello");
}

(无需显示 webservice asmx 文件,因为该部分工作正常)返回的结果类似于以下内容:

  header1.value = "abc"
  header2.value = "efg"

所以当我将它绑定到文本框时,我所要做的就是调用 data-bind="value: header1.value" 并且效果很好

但是,多行结果以索引格式返回,如下所示:

Header1[(value1=xxx,value2=yyyy,value3=zzz),(value1=ddd,value2=fff,value3=fgghg)] 

所以当我对它进行数据绑定(硬编码值)时,我使用了

data-bind="value:header1()[0].value1" 

并返回“xxx”

我的问题是如果我想返回 value1 (xxx, ddd) 的所有答案并将它们绑定在网格上。我使用了一个模板字段网格,并在其中放置了一个文本框,并尝试使用它工作的硬编码索引来检索该值。但是当我想返回所有可能的值时(使用 #index 或 $data0 它不起作用。我不知道如何使用它,如果 ASP 甚至可以使用 knokcoutjs 绑定 gridview。请帮帮我. 下面是 HTMl 代码(我将只显示一个 gridview 字段,并且我正在使用有效的硬编码索引)。

 <asp:GridView ID="GridView2" runat="server"AllowPaging="True"AutoGenerateColumns="False">    
 <Columns>
 <asp:TemplateField HeaderText="Account" SortExpression="Account" >
  <ItemTemplate>
    <asp:TextBox ID="Account" runat="server" MaxLength="60" ReadOnly="true" 
     TabIndex="-1" Style="width: 250px" data-bind="value:APInvoiceItems()[0].Accountnumber"/>
                </ItemTemplate>
         </asp:TemplateField>
  </Columns>
    </asp:GridView>
<button onclick=" RetrieveEntity()"> Update </button>

从上面的代码返回索引零处的帐号。如何返回索引1、2等?非常感谢所有帮助。先感谢您!!

4

1 回答 1

0

那是不可能的。GridVew 是一个服务器控件,因此您只能在服务器上将数据绑定到它。考虑使用一些 JavaScript 模板引擎,如 jsRender、doT、Underscore 等,从服务响应创建布局。

于 2012-11-12T22:21:00.287 回答