11

Ajax フォームを送信した後に Javascript 関数呼び出しを返す部分ビューがあります。住所のリストを受け取り、Javascript 関数を呼び出してジオコーディングし、Google マップにマーカーを配置します。次のコードをコンパイルすると、ForEach 行の var のあたりで「条件付きコンパイルがオフになっています」というエラーが発生します。

@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 構文がスクリプト ブロック内に入る可能性があるようですが、私の例ではどのように見えるかわかりません。

4

2 に答える 2

41

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

@:codeAddress(@item.GetAddress);
于 2012-10-02T07:30:56.403 に答える
19

for ループ内の JavaScript が Razor にとっては C# コードのように見えるためです。で包み<text>ます。一般に、ブロックコンテンツ{ /* this is block content */ }には常に単一のhtmlノードが必要です-または、(あなたの場合のように)htmlノードが必要ない場合は、使用できます<text>

@foreach(var item in Model)
{
    <text>codeAddress('@item.GetAddress');</text>
}  
于 2012-10-02T07:24:17.230 に答える