javascript - 中断脚本标记以运行 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>
}
推荐阅读
- smarty - 是否可以检查是否定义了(变量)修饰符(函数)?
- html - 垂直对齐似乎会影响兄弟元素的位置
- html - MySQL 到 InnerHtml Angular 7
- php - Onlinenic API v4
- r - 如何从 R 中的两个不同来源更新 numericInput?
- python - 为 IntelliJ IDEA 社区版安装 Python 3 插件
- tsql - 如何在标量函数中使用 WITH?
- c# - Adyen:当用户从 iDEAL 重定向回我的 Web 应用程序时,如何在我的回调方法中验证 iDEAL 有效负载?
- c# - 用户自定义表单,wpf 绑定控件位置
- c++ - 使用 nlohmann 在 cpp 中输出 Json 数组