3

JavaScript で次の Razor 構文を検討してください。

@{
   int badgeCount = ViewBag.badgeCount;
 }

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

ループでバッジ カウントを使用しようとしましたが、構文エラーがあります。

4

2 に答える 2

6

次のようなものを使用する必要があります。

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

    for (var i = 0; i < badgeCount; i++) {
        TrackWonBadge('@CurrentMember.Name');
    }
</script>
于 2013-02-28T17:14:30.307 に答える
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 を作成すると、コードが本番環境で保守中であるため、この最終的な分離が難しくなります。

于 2013-02-28T17:26:07.477 に答える