2014-10-10 60 views
0

我有一个在视图中使用Razor的ASP.NET MVC应用程序。我在我的控制器中构建了一个JavaScript数组。有时候,它不会存在。出于这个原因,我想在客户端初始化它。试图做到这一点,我有以下几点:初始化Razor中的JavaScript数组

var list = '@(ViewBag.List == null ? [] : ViewBag.List)'; 

不幸的是,这会产生一个错误。错误是:

Compilation Error 

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1525: Invalid expression term '[' 

有没有办法让我在剃刀中使用三元运算符数组?如果是这样,怎么样?

+0

'[]'是无效的C#代码。什么类型是ViewBag.List?你想要将某些东西序列化为JavaScript吗? – dusky 2014-10-10 15:38:14

+0

尝试'var list ='@(ViewBag.List == null?“[]”:ViewBag.List)';' – elolos 2014-10-10 15:38:35

+0

@elolos该方法生成'var list ='[''';'not'var list = [ ];' – user687554 2014-10-10 15:51:43

回答

2

因为JavaScript运行时使用JSON,你应该JSON序列化列表:

@using Newtonsoft.Json 

var list = @Html.Raw(JsonConvert.SerializeObject(ViewBag.List)); 
list = list || []; 

一般来说,@Html.Raw(JsonConvert.SerializeObject(obj))是注入一个C#对象obj到视图JSON的正确方法。 IHtmlString Html.Raw(string)只是返回string它被传递并呈现它没有任何HTML转义,这是当你将一个对象呈现为JSON成为一段Javascript代码时你想要的。

+0

我以为我在这里读过_pickles_。现在它消失了。 – melancia 2014-10-10 15:39:06

+0

@MelanciaUK咦? – 2014-10-10 15:39:59

+0

我认为当你发布第一个_version_答案时,有一个名为_pickles_的Model。没关系。 :) – melancia 2014-10-10 15:40:53