传递给javascript函数时,JSON序列化意外的标记

时间:2014-04-01 20:30:26

标签: javascript jquery asp.net json

我试图获取一个基本的可序列化对象,该对象保存在一个可串行化的字典中,并将其传递给一个javascript函数,该函数将生成一个包含该信息的模态。该对象有一些字符串变量,没什么复杂的。

这是我传入的对象:

[Serializable]
public class Details
{
    public Details() {}

    public string ID { get; set; }
    public string Name { get; set; }
}

我将字符串设置为适当的值,然后尝试创建一个调用javascript模式的链接(该ID调用适当的:

protected string WriteDetailsLink(object ID)
{
    string results = "";

    JavaScriptSerializer jss = new JavaScriptSerializer();
    results += "showDetailsModal(" + jss.Serialize(dictionaryList[ID.ToString()]) + "); return false;";

    return results;
}

在aspx页面上的html链接本身:

<a id='detailsDialog' onclick="<%# WriteDetailsLink( Eval( "ID" )) %>">Details</a>

模态的javascript函数,目前没有显示任何内容:

function showDetailsModal(Details) {



    $('#DetailsModal_dialog').dialog(
    {
        modal: true,
        //height: 500,
        width: 600,
        resizable: false,
        draggable: false,
        open: function () {

        },
        close: function(event, ui) {}

    });
}

一切正常,ID传递,当我在运行后检查链接时看起来像这样:

<a id='detailsDialog' onclick="showDetailsModal({"ID":"40662463","Name":"72485-3"}); return false;">Details</a>

它看起来与我们项目中其他地方的代码格式相同,但我不断获得

  

&#34;未捕获的SyntaxError:意外的令牌;&#34;

错误。我不能为我的生活弄清楚出了什么问题。如果我只将一个字符串传递给模态函数,它就可以工作。我真的不想发送一堆笨拙的字符串,必须手动解析它们。


更新:

是的,这是引起问题的链接周围的引号。但现在我遇到了一个新问题:

我已经为模态设置了div设置,并且我试图解析要插入其中的名称,这里是新功能(通知名称现在是BatchName):

function showBatchDetailsModal(groupDetails) {

    var tmpData = jQuery.parseJSON(groupDetails);

    $('#DetailsModal_dialog').dialog(
    {
        modal: true,
        //height: 500,
        width: 600,
        resizable: false,
        draggable: false,
        open: function () {
            $('#detailsName').text(tmpData.BatchName);
        },
        close: function(event, ui) {}

    });
}

我正在

  

&#34;未捕获的SyntaxError:意外的令牌o&#34;在jquery.min.js

2 个答案:

答案 0 :(得分:1)

onclick更改为使用单引号来包装函数调用:

onclick='<%# WriteDetailsLink( Eval( "ID" )) %>'

答案 1 :(得分:0)

您的代码应为以下

function showBatchDetailsModal(groupDetails) {

    var tmpData = groupDetails; // jQuery.parseJSON(groupDetails);
    //Don't need to parse it into json. as its already parsed.

    $('#DetailsModal_dialog').dialog(
    {
        modal: true,
        //height: 500,
        width: 600,
        resizable: false,
        draggable: false,
        open: function () {
            $('#detailsName').val(tmpData.BatchName); //<--- .text(...) is changed to .val(...)
            //If val(...) doesn't work use .text(...)
        },
        close: function(event, ui) {}

    });
}