将C# List<string>转换为Javascript

6

我希望能够将类型为List的模型属性转换为在同一视图中可用的Javascript变量。

这是我的模型结构:

 public string Title { get; set; }
 public string Description { get; set; }
 public List<String> ImgLinks { get; set; }

我希望能得到我的模型的ImgLinks属性的Javascript数组或JSON。我已经尝试过以下方法 -
var imageLinks = @(Html.Raw(Json.Encode(Model.ImgLinks)));

但我收到了语法错误的警告。有人可以帮我将其转换为JavaScript数组和JSON吗?


1
你收到了哪个警告? - Domysee
警告是语法错误。 - Willie
1
尝试使用JSON.parse('@Html.Raw(Json.Encode(Model.ImgLinks))'); - Shekhar Pankaj
这个渲染页面中的代码行实际上是什么样子? - James Thorpe
现在,我没有语法错误警告了。我想我之前尝试过这个,但是我忘记了JSON.parse需要一个字符串作为参数。谢谢@ShekharPankaj - Willie
显示剩余5条评论
2个回答

6
为了消除“语法错误”,您只需要在结尾处删除分号。
var imageLinks = @Html.Raw(Json.Encode(Model.ImgLinks))

尽管警告,但你的代码仍能正常运行。

如果有人感兴趣,这里有一种不同的解决问题的方法。你可以遍历Razor集合并将值存储在Javascript数组中,像这样:

<script type="text/javascript">

    var myArray = [];

    @foreach (var link in Model.ImgLinks)
    {
        @:myArray.push("@link");
    }

</script>

冒号(:)在myArray之前是什么意思?这是在Razor循环中引用JavaScript变量的一种方式吗? - Willie
它说“此行不作为C#执行”,并且应该在替换后发出(在这种情况下是JS)。它可能不一定是变量。 - user2864740
“@: 输出包含纯文本或不匹配的 HTML 标记的单行内容。” — 因此,@: 开始一行与 @ 开始一行几乎是相反的。 - user2864740
我从未说过它没有。我是在纠正错误的说法,即@:与变量有任何关系。它与输出中发出的文本有关。 - user2864740
我没有看到你后来所做的修改。你之前的评论并没有包含所有这些信息。当然,你是正确的 :) - Vibhesh Kaul
这是一个关于语法的更多信息的答案, https://dev59.com/IloV5IYBdhLWcg3wZOKe#36290572 - Vibhesh Kaul

1

有一个更优雅的解决方案。您需要将列表序列化为JSON:

var imageLinks = @Json.Encode(Model.ImgLinks); // <- annoying syntax error

所以你做得很对。现在要修复这个语法错误,我建议你使用简单的JavaScript set函数:

function set(value) {
    return value;
}

var imageLinks = set(@Json.Encode(Model.ImgLinks));

你可以在这里找到更多有关修复此语法错误的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接