将对象嵌套在数组中的对象时出错

时间:2017-05-18 15:54:28

标签: javascript arrays razor

我正在使用带有javascript的razor语法在我的代码的两个位置创建一个对象数组。但是,一个是错误,另一个不是。

这是一个没有出错的人:

var tableItems = [
    @foreach(var i in items)
    {
        <text>
        {
            "ItemID":@i.ItemID,
            "ItemName":@i.ItemName,
        },
        </text>
    }
];

以下是渲染时生成的javascript数组:

var tableItems = [
    {
        "ItemID":123000,
        "ItemName":"An Item Name",
    },              
    {
        "ItemID":456000,
        "ItemName":"Another Item Name"
    }, /* comma here doesn't throw error */
];

这是另一个,下面的代码没有显示错误,但呈现的是:

var tableItemsTwo = [
    @foreach (var i in items)
    {
        <text>
        {
            "ItemID": @i.ItemID,
            "ItemName": @i.ItemName,
            "Subitems":
            @foreach (var s in i.Subitems)
            {
                <text>
                {
                    "SubitemID":@s.SubitemID,
                    "SubitemName":@s.SubitemName
                },
                </text>
            }
        },
        </text>
    }
];

抛出错误的渲染数组:

var tableItemsTwo = [
    {
        "ItemID": 110000,
        "ItemName": "Item One",
        "Subitems":
            {
                "SubitemID":100,
                "SubitemName":"Subitem One"
            },          
            { /* Error on this line: "Expected identifier, string or number" */
                "SubitemID":200,
                "SubitemName":"Subitem Two"
            },  
            {
                "SubitemID":300,
                "SubitemName":"Subitem Three"
            },          
    }, /* Error on this line: "Syntax error" */
];

如何修复tableItemsTwo?我正在使用MVC 5.

1 个答案:

答案 0 :(得分:1)

您的Subitems需要[],因为它是一系列对象。

尝试:

var tableItemsTwo = [
    @foreach (var i in items)
    {
        <text>
        {
            "ItemID": @i.ItemID,
            "ItemName": @i.ItemName,
            "Subitems": [
            @foreach (var s in i.Subitems)
            {
                <text>
                {
                    "SubitemID":@s.SubitemID,
                    "SubitemName":@s.SubitemName
                },
                </text>
            }
        ]},
        </text>
    }
];