我有以下与我摔跤的JavaScript代码片段:
window.bvCallback = function (BV) { BV.pixel.trackTransaction({
"currency" : "value",
"orderId" : "@Model.Order.OrderNumber",
"total" : "@Model.Order.Total",
"items" : [
{ -->need a foreach here to loop through the collection to make this key/value pairing for each item
"price" : "value",
"quantity" : "value",
"sku" : "value"
}
]
});
};
我遇到的问题是"items" : []
行。我有一个我需要迭代的集合来创建价格数量和SKU值。此代码段将用于迭代项目:
foreach (var item in Model.Order.LineItems) {item.AdjustedUnitPrice item.sku ...};
所以我的最终结果需要如下:
..."items" : [
{
"price" : "140",
"quantity" : "1",
"sku" : "156278"
},
{
"price" : "12.69",
"quantity" : "3",
"sku" : "908736"
}]...
所以我可以在LineItems
集合中获得我需要的值,我似乎无法将foreach放入上面的键/值配对中,以便在需要时获取。
答案 0 :(得分:0)
如果可能的话,在C#代码中设置模型,而不是在视图中。
seq
然后您的视图只有帮助
public class Transaction
{
public decimal Currency { get; set; }
public int OrderId { get; set; }
...
public List<Item> Items { get; set; }
}
public class Item
{
public decimal Price { get; set; }
public int Quantity { get; set; }
public string Sku { get; set; }
}
public ActionResult Transaction(string id)
{
var transaction = service.GetTransaction(id);
return View(transaction);
}
如果您仍想使用您的方法构建对象,请在执行循环后分配@model Transaction
<script>
var transaction = @Html.Raw(Json.Encode(Model));
window.bvCallback = function(BV) { BV.pixel.trackTransaction(transaction); };
</script>
。
items
混合使用JavaScript和Razor会很快变得丑陋。但是第一个例子将混合保持在绝对最小值,而在第二个例子中很难看出Razor结束和JavaScript开始的位置。