首页 > 解决方案 > 中断脚本标记以运行 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。

谢谢,马克。

标签: javascriptc#jquery

解决方案


我不会尝试在循环中生成 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>
}

推荐阅读