2016-11-16 6 views
1

cshtml RazorビューでVS2015で異常な問題が発生しました。私はそれがカミソリのバグでなければならないと思うが、可能性がある場合は、サニティチェックと回避策の提案に感謝する。VS2015でASP.NET MVC Razorを使用しているときに中括弧が認識されない

この問題は、@{}コードブロック内の中括弧が正しく解決されないことが原因です。私はif文をforeachループ内に持っていて、中括弧を使用してifアクションを囲むと、コンパイルエラーが発生します。面白いことに、elseステートメントの後の中括弧はうまくいくようです。

これは、VSカラーコードで簡単に説明できますが、ここでは説明します。

この作品:

@{ 
    var nestLevel = 0; 
    foreach (var t in xmlHelper.GetProperties(asm, ViewBag.xmlType, "root")) 
    { 
     var type = @t.Item3.PropertyType; 
     if (xmlHelper.builtInTypes.Contains(type.ToString())) 

      <p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p> 

     else 
     { 
      nestLevel++; 
     } 
    } 
} //VS shows the @{} code block ending here as expected 

私は今、もしアクションの周りの中括弧を追加する場合は、それがコンパイルされません。

@{ 
    var nestLevel = 0; 
    foreach (var t in xmlHelper.GetProperties(asm, ViewBag.xmlType, "root")) 
    { 
     var type = @t.Item3.PropertyType; 
     if (xmlHelper.builtInTypes.Contains(type.ToString())) 
     { 
      <p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p> 
     } 
     else 
     { 
      nestLevel++; 
     } 
    } //VS now incorrectly shows the @{} code block ending here 
} 

任意の考え/提案を?

答えて

3

この行から@を削除します。

var type = @t.Item3.PropertyType; 

あなたは、C#のコード領域にすでにいるので、あなたがHTMLエリアにあった場合は、あなたと同じように、変数を参照するために、@を必要としません。

認識されたHTMLで行を開始すると、HTMLへの切り替えが想定され、C#から抜け出るので、下の行で大丈夫です。だからあなたは効果的にHTMLセクションにいます。

<p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p> 

私は変数の値を出力できるようにHTMLモードを強制したいときにこのショートカットを使用して終了します。

@if (t.isExample) 
{ 
    @: @t.OutputThis 
} 
+0

恐ろしいです。スクールボーイのエラー!ありがとうございました – ShhTot

0

あなたはかみそりビューにトークン@使うには、HTMLを解析し、停止、およびC#言語を解釈しようとするエンジンを言っている、トークンがあなたであるため、カミソリは構文解析を停止する際に知っているのに十分賢いです書くのはhtml言語の一部なので、あなたのC#コードを読むべきかを綿密に指定する必要があります。なぜなら、ifステートメントで@トークンで認識を再びオンにする必要があるからです。 @トークンをエスケープする場合は、@をhtmlとして記述しようとしているので、代わりに@@を使用します。これがうまくいくといいですか?

関連する問題