0

我想在视图C#JS片段中使用两个数组。为了做到这一点,我尝试使用JavaScriptSerializer()但数据数组没有得到任何值(视图的源显示如下):

 var mydata = 

我遇到的每个示例都通过使用<%=%>标签在 JS 中注入 C# 代码。由于我使用的是 ASP.NET MVC 4,因此这对我没有任何结果。因此我尝试了以下方法:

<script type="text/javascript">
   var mydata = @{ new JavaScriptSerializer().Serialize(Model.GetData());}

 $(function () {
  // Generates a chart using the mydata array
 }
</script>

这种语法有什么问题?当我尝试为其下面的标题添加一个数组时,我收到一个编译错误。有警告说这些行没有终止,但是当我;在每行的末尾添加时,它也会给出一个语法错误(没有具体错误,只是“语法错误”)。

GetData()和中的数据GetHeaders()定义如下:

public List<int> GetData() {
    return new List<int>(new[] { 4, 5, 6});
}

我已经尝试将它作为 a 退回,int[]但这没有任何区别。如何在 JavaScript 片段中使用 C# 列表/数组?

编辑:未知编译错误的图像。当我不放置分号时,我在第二个var. 我收到一个终止行尾的建议,它将分号添加到末尾。然后我有如下所示的问题。奇怪的细节:文件的一侧没有红条,通常指示错误所在的位置。

话虽这么说:执行脚本时,数组具有其预期值,并且一切正常。

在此处输入图像描述

4

4 回答 4

6

问题是@{ }创建了一个代码块,它不会将结果打印到呈现的页面。你可以这样做:

@{ 
    var serializer = new JavaScriptSerializer();
    @serializer.Serialize(Model.GetData())
}

或者更好的是,使用Json帮助器:

@Json.Encode(Model.GetData())
于 2013-09-26T14:00:27.550 回答
1

当您将操作包含在代码块中时,除非您明确告诉它渲染,否则不会渲染输出。

试试这个:

@Html.Raw(Json.Encode(Model.GetData()))
于 2013-09-26T14:03:00.717 回答
0

尝试将序列化程序的结果放在单引号中,例如:

<script type="text/javascript">
    var data = '@{ new JavaScriptSerializer().Serialize(Model.GetData());}';
</script>

您可以创建一个 HTML 助手来调用它,例如:

<script type="text/javascript">
    var data = '@Html.JSSerializerHelper(Model.GetData())';
</script>

只有一种我认为最优雅的方式。

于 2013-09-26T14:08:34.943 回答
-1

您可以将 List 转换为 JavaScript 数组以在 js 中使用。

尝试这个:

<script type="text/javascript">
    var mydata = [];
    @foreach(int i in Model.GetData()) {
         <text>mydata.push(@i);</text>
    }

    $(function () {
       // Generates a chart using the mydata array
    }
</script>
于 2013-09-26T14:00:59.033 回答