2014-10-10 57 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