` で、コンテンツであることを明示する必要があります。 **正しいコード例** ```html test
@for (int i = 0; i < 5; i++) { @:test
}
``` または ```html test
@for (int i = 0; i < 5; i++) { test
}
``` **出力結果** ```html test
test
test
test
test
test
``` `` の文字は出力されません。 ## JavaScript コードの出力 以上を踏まえた上で、Razor 内で JavaScript のコードを動的に出力したい場合、以下のように記述します。 **コード例** ```html @{ var items = new string[] { "abc", null, "def" }; } ``` **出力結果** ```html ``` `foreach` 内で JavaScript のコードを出力する場合には `@:` (または ``) が必要です。 また、その中で変数を参照したい場合は `@` を指定します。 ### 出力内容を動的に変えたい場合 個人的にこれでかなりはまりました。 例えば、上述のコードをもとに、出力を以下のように変更したい場合、`item` に対する条件判定が必要になります。 (`item` が `null` の場合は、`null` を出力したい) **得たい出力** ```html ``` 愚直に if 文を使えば以下のように書けます。 **if 文を使った例** ```html @{ var items = new string[] { "abc", null, "def" }; } ``` しかし、こういう Null 判定はワンライナーでシンプルに書きたいものです。 とりあえずいろいろ試行錯誤した結果、以下のように書けば目的の出力が得られました。 **三項演算子を使った例** ```html @{ var items = new string[] { "abc", null, "def" }; } ``` 思ったほどシンプルになりませんでしたが、私の頭ではこれが限界でした。 他にもっとシンプルな書き方があれば教えて頂きたいです。 上記の要点(というか悩んだ部分)は以下です。 - Razor が出力するのは文字なので、`null` も文字列として `"null"` と書けばいい - 同様に変数の中身も文字列として `$"'{item}'"` と書けばいい - しかし、単純に `$"'{item}'"` と書くと、シングルクォートがエンコードされてしまう - `Html.Raw` でエンコードを無効化する必要がある