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