0
 protected void BindData()
    {
        List<Product> products = product.GetRepeaterData(prod);
        string json = JsonConvert.SerializeObject(products);
        dataRepeater.DataSource = json;
        dataRepeater.DataBind();
    }

 <asp:Repeater ID="dataRepeater" runat="server">
    <HeaderTemplate>
        List<div id="accordion">
    </HeaderTemplate>
    <ItemTemplate>
        <h3>
            <a href="#" style="background-color: gray; height: 25px; color: White; text-decoration: none;">
                <%# DataBinder.Eval(Container.DataItem, "Name")%></a></h3>
        <div>
            <ul>
                <li><span>Id:
                    <%# DataBinder.Eval(Container.DataItem, "Id")%></span></li>
                <li><span>OrganizationId:
                    <%# DataBinder.Eval(Container.DataItem, "Organization")%></span>    </li>
                <li><span>ParentProduct:
                    <%# DataBinder.Eval(Container.DataItem, "Product")%></span></li>
        </div>
    </ItemTemplate>
    <FooterTemplate>
        </div></FooterTemplate>
</asp:Repeater>

error: DataBinding: 'System.Char' does not contain a property with the name 'Name'. 
 <%# DataBinder.Eval(Container.DataItem, "Name")%></a></h3>

私はJSONとAjaxの概念全体に不慣れです。Webサービスから大量のデータを取得しているため、呼び出しが完了するまでプロセスが遅くなります。JSONとAjaxを使用してこれを非同期呼び出しにする必要があります。現在、バインドする前にデータをシリアル化/逆シリアル化できます。リピーターに逆シリアル化した後、データをバインドする意味がないため、シリアル化されたデータをリピーターにバインドしようとしていますが、バインドしていません。第二に、誰かがこれをajax呼び出しとして行う方法を教えてもらえますか?クライアント側に更新パネルを追加するだけで十分ですか?申し訳ありませんが、この質問は少し曖昧ですが、今は迷っています。ドキュメントや例も役立ちます。これが正しい方法かどうかわからないためです。

4

1 に答える 1

1

JSON はクライアント側で使用することを意図しており、サーバー側のコントロールを使用してバインディングを行うことはありません。

バインド構文が必要な場合は、そのためのフレームワークがたくさんあります。ノックアウト、口ひげなど

ただし、通常は ajax 呼び出しで JSON を取得し、そのデータを使用して必要な方法で DOM にマークアップを追加します。updatepanel などを使用する場合を除き、サーバー側のコントロールは忘れてください。

于 2012-10-17T15:41:36.513 に答える