2012-10-02 51 views
8

我有一個局部視圖,在我提交Ajax表單後返回一個Javascript函數調用。它需要一個地址列表並調用Javascript函數來對Google地圖進行地理編碼和放置標記。當我編譯下面的代碼時,在ForEach行的var附近出現「Conditional compilation is turned off」錯誤。JavaScript MV中的MVC剃刀foreach塊

@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);