0

首先为我的英语道歉。我是 json 领域的新手。我的问题是我无法将 json 响应中接收的数据解析为 asp:LinkBut​​ton 或任何 asp:element,因为我无法创建正确的 sintax。特别是,我想要做的是:

<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);
    }
}

如果您需要将一些复杂的对象(如制造商对象数组)传递给服务器,则第二种方法更适合。在这种情况下,您可以在客户端将此对象序列化为 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 回答