JavaScript中的Razor语法

时间:2013-02-28 17:09:43

标签: javascript asp.net-mvc razor

在JavaScript中考虑这种Razor语法:

@{
   int badgeCount = ViewBag.badgeCount;
 }

<script type="text/javascript">
    for (var i = 0; i < @badgeCount; i++) {
        TrackWonBadge('@CurrentMember.Name');
    }
</script>

我尝试在循环中使用徽章计数,但是存在语法错误。

2 个答案:

答案 0 :(得分:6)

你应该这样做:

<script type="text/javascript">
    var badgeCount = Number('@ViewBag.badgeCount');

    for (var i = 0; i < badgeCount; i++) {
        TrackWonBadge('@CurrentMember.Name');
    }
</script>

答案 1 :(得分:2)

我认为更好的方法是尝试尽可能地将动态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也会使代码处于生产和维护状态时更加难以理解。