使用foreach循环创建键/值对

时间:2017-10-09 19:20:26

标签: javascript asp.net-mvc

我有以下与我摔跤的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放入上面的键/值配对中,以便在需要时获取。

1 个答案:

答案 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开始的位置。