我想在视图中的C#
片段中使用来自JS
的两个数组。为了做到这一点,我尝试使用JavaScriptSerializer()
,但是数据数组没有得到任何值(视图的源代码如下所示):
var mydata =
我遇到的每个示例都使用C#标记在JS中注入<%=%>
代码。这不会给我带来任何结果,因为我使用的是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});
}
我试着把它作为一个int[]
返回,但是这并没有什么区别。如何在C#片段中使用JavaScript列表/数组?
编辑:未知编译错误的图像。当我不放置分号时,就会在第二个var
上出现语法错误。我得到了终止行尾的建议,这将分号添加到末尾。然后,我有如下所示的问题。奇怪的细节:文件的一侧没有红色的条,通常指示错误的位置。
这就是说:在执行脚本时,数组有它们的期望值,一切都按其应有的方式工作。
发布于 2013-09-26 06:00:27
问题是@{ }
创建了一个代码块,它没有将结果打印到呈现的页面。你可以这样做:
@{
var serializer = new JavaScriptSerializer();
@serializer.Serialize(Model.GetData())
}
或者更好的是,使用Json
助手:
@Json.Encode(Model.GetData())
发布于 2013-09-26 06:03:00
当您将操作包含在代码块中时,除非您显式地告诉它呈现,否则不会呈现输出。
试试这个:
@Html.Raw(Json.Encode(Model.GetData()))
发布于 2013-09-26 06:08:34
尝试将序列化程序的结果放在单引号中,如:
<script type="text/javascript">
var data = '@{ new JavaScriptSerializer().Serialize(Model.GetData());}';
</script>
您可以创建一个HTML助手来调用它,例如:
<script type="text/javascript">
var data = '@Html.JSSerializerHelper(Model.GetData())';
</script>
只有一种我认为最优雅的方式。
https://stackoverflow.com/questions/19030244
复制相似问题