RAZOR Javascript编码协助

时间:2017-10-10 15:30:51

标签: javascript asp.net-mvc razor

我有以下用于创建对象的JS代码:

var TransactionData = {
    orderId: '@Model.Order.SalesOrderNumber.SelfOrDefault().FullOrderNuber',
    curreny: "USD",
    total: '@Model.Order.TotalSalesPrice',
    items: [
        {
            @foreach (var item in Model.Order.LineItems)
            {
                sku: item.ProductId,
                quantity: item.Quantity,
                price: item.AdjustedUnitPrice
            }
    }]   
}

我需要遍历模型中的LineItems来获取sku,数量和价格。需要创建1到x个项目。使用上面的代码我在sku:,quantity:和price:行中的逗号之后得到错误“; expected”。最终,我试图在项目中获得以下内容:

{
  "price" : "140", 
  "quantity" : "1",
  "sku" : "156278"
},
{
  "price" : "12.69", 
  "quantity" : "3",
  "sku" : "908736" 
}

我想我几乎就在那里我只需要解决这个错误。有什么建议?我在RA上的JS上生锈了,所以请耐心等待。

感谢。

3 个答案:

答案 0 :(得分:0)

我认为在Razor中操作javascript代码的正确方法是使用<text>标记封装它。

看这篇文章: Using Razor within JavaScript

希望它能解决您的语法错误!

答案 1 :(得分:0)

这完全被解释为服务器端代码:

@foreach (var item in Model.Order.LineItems)
{
    sku: item.ProductId,
    quantity: item.Quantity,
    price: item.AdjustedUnitPrice
}

当然,这是一个语法错误,因为这三行不是有效的C#。相反,您希望将这些作为客户端代码处理,并将一些服务器端值发送到输出。像这样:

@foreach (var item in Model.Order.LineItems)
{
    <text>
    {
        sku: @item.ProductId,
        quantity: @item.Quantity,
        price: @item.AdjustedUnitPrice
    },
    </text>
}

尽管如此,您在Razor代码中构建JavaScript结构的手动工作越多,您开始证明仅仅序列化结构的次数就越多。 This question是一个很好的开始。当然,您可以使用任何您喜欢的序列化器。

答案 2 :(得分:0)

这是我最终的结果:

var items = [  
    @foreach (var item in Model.Order.LineItems)
        {
            <text>
                {
                    sku: '@item.Product.SKU',
                    quantity: '@item.Quantity',
                    price: '@item.AdjustedUnitPrice',
                    name: '@item.Product.Description.Name'
                },
            </text>
        }
];

这将创建项目数组,然后使用:

items: items

设置数组并且有效。

谢谢大家。