中断脚本标记以运行C#循环



我有点被试图在C#应用程序中实现的跟踪脚本卡住了。我需要循环浏览购物车中的购物篮项目,但我不知道如何打破脚本标记,让C#循环处理,这样每个项目都可以迭代。下面的示例代码(我在中添加了注释,试图使其更清晰(:

@if (Model != null)
{
<script>
$(function () { // START JAVASCRIPT
console.log('Ticket type: @Model.BasketItems[i].Name');
console.log('Price: @Model.BasketItems[i].Price');
console.log('Quantity: @Model.BasketItems[i].Quantity');
dataLayer.push({
'event': 'calendarCheckout',
'ecommerce': {
'detail': {
'products': [ // END JAVASCRIPT
// START C# LOOP
@for (var i = 0; i < Model.BasketItems.Count; i++)
{
if (Model.BasketItems[i].Quantity > 0)
{
{ // BREAK C# LOOP
// JAVASCRIPT
'name': '@Model.BasketItems[i].Name',
'id': '',
'price': '@Model.BasketItems[i].Price',
'brand': 'Some Brand',
'quantity': '@Model.BasketItems[i].Quantity'
},
// END JAVASCRIPT. FINISH C# LOOP BELOW
}
}
// FINISH C# LOOP
// START JAVASCRIPT
]
}
}
});
});// FINISH JAVASCRIPT
</script>
}

任何关于如何实现这一目标的指导都将不胜感激。目前,由于类似的语法,C#循环项被错误地呈现为JS。

谢谢,做记号

与其尝试在循环中生成json,不如串行化整个json;

var products = @Html.Raw(JsonConvert.SerializeObject(Model.BasketItems.Where(i => i.Quantity > 0)));

您也可以在循环中使用<text>标记,但我不确定razor-html解析器是否能完美地使用嵌套在脚本中的标记。

if (Model.BasketItems[i].Quantity > 0)
{
<text>
....
</text>
}