2012-10-02 22 views
8

私はAjaxフォームを送信した後にJavascript関数呼び出しを返す部分ビューを持っています。住所のリストを取得し、Javascript関数を呼び出してジオコードし、マーカーをGoogle Mapに配置します。次のコードをコンパイルすると、ForEach行のvarを中心に「条件付きコンパイルがオフになっています」というエラーが表示されます。ASP MVC Razor foreach in Javascriptブロック

@model IEnumerable<TestStore.Models.Address> 

@if (Model.Count() > 0) 
{ 
<script type="text/javascript"> 
    deleteMarkers(); 

    @foreach(var item in Model) 
    { 
     codeAddress('@item.GetAddress'); 
    } 
</script> 
} 

私は、コードの周りいじると、次のコンパイルエラーが発生することなく作業を行います。

@if (Model.Count() > 0) 
{ 
<script type="text/javascript"> 
    deleteMarkers(); 
</script> 

    foreach (var item in Model) 
    { 
     <script type="text/javascript"> 
      codeAddress('@item.GetAddress'); 
     </script> 
    } 
} 

議論のために、私はJavascriptの機能の多くは、ループ内の呼び出しを行う長くロジックを持っている場合は、私は、1つのスクリプトブロックの中にすべてを囲むことを好むでしょう。私はStack Overflowの周りを検索しました。そして、Razorの構文がスクリプトブロック内に入るように見えますが、私の例のようにどのように見えるのかわかりません。

答えて

14

あなたのforループ内のjavascriptは、C#コードからRazorのように見えるためです。 <text>にラップします。一般に、任意のブロックのコンテンツ{ /* this is block content */ }は常に単一のHTMLノードを持っている必要があります - またはあなたが(あなたのケースのように)HTMLのノードを必要といけない場合、あなたは<text>

@foreach(var item in Model) 
{ 
    <text>codeAddress('@item.GetAddress');</text> 
} 
27

それとも、代わりに<text>@:構文を使用することができますを使用することができますループ内の要素です。 Hereはチュートリアルです。

@:codeAddress(@item.GetAddress);