2012-01-19 25 views
1

私はRazorを習得しようとしていますが、構文上の問題を抱えています。条件内でforeach内部条件付きの剃刀

@if (searchTerm != ""){ 
    <h2>Showing @ExamineManager.Instance.Search(searchTerm, true).Count() results for @searchTerm</h2> 
    <div class="search-results"> 
    @foreach (var result in ExamineManager.Instance.Search(searchTerm, true)) { 
     if (result.Fields["nodeTypeAlias"] == 'File'){ 
     <p>File</p> 
     }else{ 
     <p>Not file</p> 
     } 
    } 
    </div> 
} 

「この文字が多すぎます」というエラーが表示されます。実際のコードの仕組みは動作しますが、条件文が入れ子になっているという構文上の問題ですが、@ {}ブロックのさまざまな組み合わせを試してみましたが、さまざまな行を前に置いていますが、 。

誰かが間違っているのを見ることはできますか?

ありがとうございます!

答えて

1

result.Fields["nodeTypeAlias"] == "File" 
+0

ああ!私は最近、JavaScriptで時間を過ごしました;)これは今、完璧に動作します。ありがとうございます。 – Dan

-1

ちょうどこのコードはあなたに

+0

これは元のコードに相当するもので、これ以上のスパゲッティが追加されています。 –

2

'File'を助ける

@{ 

     if (searchTerm != ""){ 
     <h2>Showing @ExamineManager.Instance.Search(searchTerm, true).Count() results for @searchTerm</h2> 
     <div class="search-results"> 
     foreach (var result in ExamineManager.Instance.Search(searchTerm, true)) { 
      if (result.Fields["nodeTypeAlias"] == 'File'){ 
      <p>File</p> 
      } 
      else{ 
      <p>Not file</p> 
      } 
     } 
     </div> 
    } 


     } 

このようにコードを変更するには、無効な構文です。あなたは、文字列で作業したいときには、おそらくあなたのif状態で"File"を意味:

if (result.Fields["nodeTypeAlias"] == "File") 
あなたがC#で比較

result.Fields["nodeTypeAlias"] == 'File' 

を持っているので、あなたがそのような単一引用符の中に文字列を書き込むことはできませんされて