考虑一下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会让这种最终的分离在您的代码进入生产和维护阶段时更加困难。
.aspx
文件中用<script runat="server">
标签编写C#的原因相同。但最终还是要看你自己。 - Katie Kilian