2017-10-09 3 views
0

とキー/値のペアを作成:は私がと格闘しています私にはJavaScriptの次のスニペットを持つforeachループ

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を入れて、必要なときに取得するようです。

+2

foreachループを実行してコレクションを作成し、それを 'items'に割り当てることができます。 – Jasen

+0

cshtmlファイルの中にありますか? –

+0

Jasenのコメントに基づいて解説すると、 'var items = []; forループを実行し、オブジェクトをアイテムにプッシュします。 ... trackTransaction({... items:items、....}) ' – SethWhite

答えて

0

ビュー内ではなく、のC#コードにモデルを設定してください。

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); 
} 

あなたはまだあなたがループを実行した後だけitemsを割り当て、あなたの方法でオブジェクトを構築したい場合は、あなたのビューは、単にヘルパー

@model Transaction 

<script> 
    var transaction = @Html.Raw(Json.Encode(Model)); 
    window.bvCallback = function(BV) { BV.pixel.trackTransaction(transaction); };   
</script> 

を持っています。

<script> 
window.window.bvCallback = function (BV) { 

    var items = []; 

    @foreach (var i in Model.Order.LineItems) 
    { 
     var item = Html.Raw(Json.Encode(new { price = i.AdjustedUnitPrice, ... })); 

     <text> 
     items.push(@item); 
     </text> 
    } 

    var transaction = { 
     "currency" : "value", 
     "orderId" : "@Model.Order.OrderNumber", 
     "total" : "@Model.Order.Total", 
     "items" : [], // or just assign it here 
     ... 
    }; 

    transaction.items = items; 

    BV.pixel.trackTransaction(transaction); 
}; 
</script> 

JavaScriptとRazorを混在させると、醜いことがあります。しかし、最初の例では、ミキシングを絶対的な最小値に保ちますが、2番目の例では、Razorが終了してJavaScriptが開始される場所を確認することは困難です。

+0

ビューは既にC#で表示されていますが、問題は特定のもののみ必要ですビューからの値。セクションオプションは素晴らしいです。ありがとう。 – john

関連する問題