【问题标题】:ASP MVC Razor foreach inside Javascript blockJavascript块内的ASP MVC Razor foreach
【发布时间】:2012-10-02 07:21:22
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    或者您可以在循环中使用@: 语法代替&lt;text&gt; 元素。 Here 是一个教程。

    @:codeAddress(@item.GetAddress);
    

    【讨论】:

    • 即使过了这么久还是很有用的
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-18
      • 2019-11-17
      • 2016-07-11
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多