考虑一下 JavaScript 中的 Razor 语法:
@{
int badgeCount = ViewBag.badgeCount;
}
<script type="text/javascript">
for (var i = 0; i < @badgeCount; i++) {
TrackWonBadge('@CurrentMember.Name');
}
</script>
我尝试在循环中使用徽章计数,但存在语法错误。
考虑一下 JavaScript 中的 Razor 语法:
@{
int badgeCount = ViewBag.badgeCount;
}
<script type="text/javascript">
for (var i = 0; i < @badgeCount; i++) {
TrackWonBadge('@CurrentMember.Name');
}
</script>
我尝试在循环中使用徽章计数,但存在语法错误。
你应该使用这样的东西:
<script type="text/javascript">
var badgeCount = Number('@ViewBag.badgeCount');
for (var i = 0; i < badgeCount; i++) {
TrackWonBadge('@CurrentMember.Name');
}
</script>
我认为更好的方法是尽量避免动态 JavaScript。这样的事情会更好:
@{
int badgeCount = ViewBag.badgeCount;
string memberName = "Some Name";
}
<input type="hidden" id="BadgeCount" value="@badgeCount" />
<input type="hidden" id="MemberName" value="@memberName" />
<script type="text/javascript">
var badgeCount = document.getElementById('BadgeCount').value;
var memberName = document.getElementById('MemberName').value;
for (var i = 0; i < badgeCount; i++) {
TrackWonBadge(memberName);
}
</script>
这样做的好处是,如果脚本变得更复杂,您将能够将脚本迁移到自己的文件中。
事实上,我根本不会构建内联脚本。我会将其移动到单独的 .js 文件中,以使标记与客户端的逻辑分开。这类似于 ASP.NET MVC 强制您在服务器端执行的操作;您的视图使用与控制器不同的语言,因此位于单独的文件中。即使您现在不想进行这种文件分离,编写动态 JavaScript 也会使这种最终分离变得更加困难,因为您的代码正在生产和维护中。