foreach或ToArray在section中,带有js变量error

本文关键字:带有 js 变量 error ToArray section foreach | 更新日期: 2023-09-27 18:09:24

我试图在mvc 4中的section中做foreach。我只是不能让它得到js变量的作用域。所以这里发生的是它不能识别foreach内部的图像。如何解决这个问题?

@section Scripts {
    <script type="text/javascript">
        var images = "";
        @foreach (var item in Model.Images)
        {
            //it does not know about the images varable here
            images += string.Format("[{0}/{1}],", "path", item);
        }
    </script>
}

I'm also try this without success

@section Scripts {
    <script type="text/javascript">
        //statement is not terminated
        var images = @Model.Images.ToArray()
        console.log(images);
    </script>
}

编辑
我只是在控制器中填充图像名称然后传递给视图。

public class ImageViewModel
{
    public string[] Images { get; set; }
}

foreach或ToArray在section中,带有js变量error

你需要用@:切换回HTML(在你的情况下是JS),然后再次回到razor

@section Scripts {
    <script type="text/javascript">
        var images = "";
        @foreach (var item in Model.Images)
        {
            //it does not know about the images varable here
            @:images += "@string.Format("[{0}/{1}],", "path", item)";
        }
    </script>
}

否则它会假设你的images是一个服务器端c#变量,而不是客户端内容。

要回答你的评论,你要这样结束:

    <script type="text/javascript">
        var images = "";
        images += "imagename1";
        images += "imagename2";
        images += "imagename3";
        images += "imagename4";
    </script>

所以从那个往回看,这是伪脚本。

    <script type="text/javascript">
        var images = "";
        // LOOP START HERE
        images += "@SERVER VALUE HERE";
        // LOOP END HERE
    </script>

如果你的代码看起来像@foreach{}代码块,它会认为它是服务器端代码。

        @foreach (var item in Model.Images)
        {
            // This "must" be a local images variable as it is in a Razor code block!
            images += @string.Format("[{0}/{1}],", "path", item);  // Wrong!
        }

@:转义序列告诉razor将以下内容视为标记而不是代码。然后@(expression)将服务器端值注入到该客户端标记中。客户端标记常量需要引号。

刮刀版本:

  @section Scripts {
    <script type="text/javascript">
        var images = "@string.Join(",", Model.Images)";
        console.log(images);
    </script>
  }