11

我有一个部分视图,它在我提交 Ajax 表单后返回一个 Javascript 函数调用。它需要一个地址列表并调用 Javascript 函数来对谷歌地图进行地理编码和放置标记。当我编译以下代码时,在 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 回答