4

VS2012で2つのアプリケーションを作成しました

  1. アプリケーション#1。MVC 3、NET 4.5
  2. アプリケーション#2。MVC 4、NET 4.5

ここで、任意の .cshtml ファイルを開き、次のコードを追加します。

<div>
@if (true)
{
      @string.Format("{0}", "test")
}
</div>

Application#1 (mvc3) で問題なく動作し、「test」という単語が表示されます。ただし、Application#2 (mvc4) では機能しません。

なぜそれが起こるのか、何を変更する必要があるのか​​ 誰か説明できますか?

更新:もう 1 つ非常に奇妙なことがわかりました。@string.format("some text") を @String.format("some text") に置き換えると、すべて正常に動作します (大文字の文字列に注意してください)

4

3 に答える 3

6

アップグレード時に同様の問題がありました... @string.Format("{0}", "test")MVC3 のように、単純に書き込むだけではページに直接書き込まれなくなったようです。代わりに、次のようにする必要があります。

<div>
@if (true)
{
      Html.Raw(string.Format("{0}", "test"));
}
</div>

また

<div>
@if (true)
{
      <text>@string.Format("{0}", "test"))</text> //added @ to evaluate the expression instead of treating as string literal
}
</div>
于 2012-10-02T14:08:42.890 に答える
0

Razor エンジンを使用していますか?

あなたは@ifブロックにいるので、string.Format("{0}", "test")ではなく : と書くことができます@string.Format("{0}", "test")

@に注意してください

于 2012-10-02T07:07:46.343 に答える
0

条件付きチェックの Razor 構文では、1 つの @ 記号でブロックを開始してから、条件を内部に配置できます。

例えば

  @{var price=20;}
<html>
<body>
@if (price>30)
  {
  <p>The price is too high.</p>
  }
else
  {
  <p>The price is OK.</p>
  }
</body>
</html>

したがって、あなたの場合、1 つのブロック内で 2 つの @ を使用しています。その部分を確認すると解決します。

したがって、コード ブロックは次のようになります。

<div>
@if (Model == null)
{
      <p>@string.Format("{0}", "test")</p>
}
</div>

さらに、コード行にあるように「@」を 2 回入力すると、下の画像のようにヒントが得られます。これは Razor Syntax 4.0 の機能です。また、「;」も見逃しています あなたのコード行で。

ここに画像の説明を入力

http://www.w3schools.com/aspnet/razor_cs_logic.asp

于 2012-10-02T07:11:06.543 に答える