ASP MVC Razor foreach里面有Javascript块

时间:2012-10-02 07:21:23

标签: c# asp.net-mvc-3 razor

我有一个部分视图,在我提交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语法可能会进入一个脚本块,但我不知道在我的例子中它是怎么样的。

2 个答案:

答案 0 :(得分:29)

或者您可以在循环中使用@:语法而不是<text>元素。 Here是一个教程。

@:codeAddress(@item.GetAddress);

答案 1 :(得分:15)

因为你的for循环中的javascript看起来像是Razor的C#代码。将其包裹在<text>中。通常,任何块内容{ /* this is block content */ }应始终具有单个html节点 - 或者如果您不需要html节点(如您的情况),则可以使用<text>

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