无法在 javascript 中使用我的模型数据

Cannot use my model data in javascript

你能帮我找出我做错了什么吗?

我的模型有一个名为 AllKnownColors 的字符串 [] 字段。我正尝试在我的 javascript 代码中使用它,如下所示:

    var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors)');

但是没用。调试器向我展示了这个:

var clrs = JSON.parse('System.String[]');

和以下错误:未捕获的语法错误:意外的标记 S

而且我不知道哪里出了问题。

谢谢。

代码

var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors)');

类似于

var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors.ToString())');

您需要将 Model.AllKnownColors 转换为 json。为此,您可以使用 Newtonsoft JSON

var clrs = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.AllKnownColors))');

或者您可以编写自己的转换方法。 Newtonsoft JSON 是简单且不错的选择。您自己的方法可能会更快。

Model.AllKnownColors 是一个 string 数组。 Html.Raw 接受单个 string 作为参数。由于 Model.AllKnownColors 不是 string,C# 框架调用对象的 ToString 方法。默认情况下,ToString returns 对象类型的名称。

如果您尝试使用纯色串,您可以这样做:

var clrs = '@string.Join(", ", Model.AllKnownColors)';

如果你真的想把Model.AllKnownColors变成一个JavaScript数组,你可以这样做:

var clrs = @Html.Raw(Json.Encode(Model.AllKnownColors));

请注意,在这两种情况下,JSON.parse 都是不必要的。