1

私は、ajaxを介してWeb servie呼び出しを正常に行い、データを返し、1行の結果をテキストボックスにバインドするプロジェクトに取り組んでいます。ただし、accountなどのフィールドに複数の値があり、私の場合はインデックスが付けられている場合があります。返された結果をハードコーディングしてバインドすることはできますが、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");
}

(その部分は正常に機能するため、Webサービスの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を使用してグリッドビューをバインドできる場合は、助けてください。以下はHTMlコードです(1つのグリッドビューフィールドのみを表示し、機能しているハードコードされたインデックスを使用しています)。

 <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>

インデックス0の口座番号は、上記のコードから返されます。インデックス1、2などを返す方法は?すべての助けは大歓迎です。前もって感謝します!!

4

1 に答える 1

0

それは可能ではありません。GridVewはサーバーコントロールであるため、サーバー上でのみデータをバインドできます。jsRender、doT、UnderscoreなどのJavaScriptテンプレートエンジンを使用して、サービス応答からレイアウトを作成することを検討してください。

于 2012-11-12T22:21:00.287 に答える