0

まず、私の英語についてお詫び申し上げます。私はjsonエリアの初心者です。私の問題は、json 応答で受け取ったデータを asp:LinkBut​​ton などの asp:element に解析できないことです。正しいシンタックスを作成できないためです。特に、私がやろうとしていることは次のとおりです。

<script type="text/javascript">
    $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes",   min_year:"1941", max_year:"2012"}, function (data) {


             var makes = data.Makes;
             for (var i = 0; i < makes.length; i++) {   

                 ($("<asp:LinkButton ID=\"lb" + i +"\" runat=\"server\" />").text(makes[i].make_display )).appendTo("#lbProva");
             }
         });
<script>

<ul id="lbProva" class="lb_prova" >

    </ul>

私は多くの可能性を試しましたが、誰も正しいものではなかったので、誰かが私を助けてくれることを願っています. よろしくお願いします。

4

2 に答える 2

1

実際には、サーバー コントロールはサーバー上でのみ作成できます。したがって、問題は、AJAX 呼び出し応答をサーバーに渡し、それを強制してページ上の目的の領域を更新する方法です。

最初のバリアント

<script type="text/javascript">
    $(function () {
        $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes", year: "2009" },
        function (data) {
            //The 'data' variable contains all response data.
            var makes = $.map(data.Makes, function (make) { return make.make_display; }).join(";");
            document.getElementById("<%= CarMakersHiddenField.ClientID %>").value = makes;
            __doPostBack("<%= CarMakersUpdatePanel.ClientID %>", "");
        });
    });
</script>

<asp:UpdatePanel runat="server" ID="CarMakersUpdatePanel" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:HiddenField runat="server" ID="CarMakersHiddenField" />
        <asp:BulletedList runat="server" ID="MakersList" DisplayMode="LinkButton">
        </asp:BulletedList>
    </ContentTemplate>
</asp:UpdatePanel>

サーバーコード:

protected void Page_Load(object sender, EventArgs e)
{
    MakersList.Items.Clear();
    foreach (var maker in CarMakersHiddenField.Value.Split(';'))
    {
        MakersList.Items.Add(maker);
    }
}

2 番目のアプローチは、サーバーにメーカー オブジェクトの配列などの複雑なオブジェクトを渡す必要がある場合に適しています。その場合、このオブジェクトをクライアントで JSON 文字列にシリアル化し、サーバーで逆シリアル化できます。少し変更された以前のバージョンのように見えます:

<script type="text/javascript">
    $(function () {
        $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes", year: "2009" },
        function (data) {
            //The 'data' variable contains all response data.
            var serializedString = Sys.Serialization.JavaScriptSerializer.serialize(data.Makes);
            document.getElementById("<%= CarMakersHiddenField.ClientID %>").value = serializedString;
            __doPostBack("<%= CarMakersUpdatePanel.ClientID %>", "");
        });
    });
</script>

マークアップは最初のバージョンと同じままです。サーバーコード:

[Serializable]
public class Make
{
    public string make_id;
    public string make_display;
    public bool make_is_common;
    public string make_country;
}

protected void Page_Load(object sender, EventArgs e)
{
    MakersList.Items.Clear();
    if (!String.IsNullOrEmpty(CarMakersHiddenField.Value))
    {
        var serializer = new DataContractJsonSerializer(typeof(Make[]));
        using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(CarMakersHiddenField.Value)))
        {
            var makes = serializer.ReadObject(stream) as Make[];
            if (makes != null)
            {
                foreach (var maker in makes)
                {
                    MakersList.Items.Add(new ListItem(maker.make_display, maker.make_id));
                }
            }
        }
    }
}
于 2012-04-08T15:05:45.860 に答える
1

クライアント側の JavaScript で asp.net サーバー コントロールを作成することはできません。クライアント側で json データを使用する場合は、既に生成されている html コントロールに適用する必要があります。

于 2012-04-08T13:55:44.590 に答える