2015-04-29 82 views
-2

我使用ViewBag或ViewData在動作函數中傳遞一些數據(refernce type或value type)。mvc框架如何將對象解析爲JavaScript對象?

傳遞的數據(ViewData的或ViewBag)我賦予它的JavaScript變量在客戶端:

var stuff = @ViewBag.somedata; 

我的問題是什麼樣的變量東西這將是該類型是它Javascript對象?或字符串?或者JSON格式的字符串?

預先感謝您。

+1

可能重複[?我怎樣寫未編碼的JSON來使用剃刀我查看](http://stackoverflow.com/questions/4072762/how-do-i-write-unencoded-json -to-my-view-using-razor) –

回答

1

它會是什麼類型的變量的東西?

JavaScript現在有類型? Yes it does,但我不認爲這是你想要回答的問題。此外,你的問題缺乏關於你想要做什麼準確很多的細節。數據來自哪裏?你想用它做什麼?你爲什麼要把它分配給一個Javascript變量?

無論如何,這樣的:如果@ViewBag.somedata包含若干(視文化雖然)或對象,其.ToString()表示是有效的JavaScript

var stuff = @ViewBag.somedata; 

纔會工作。

剃刀沒有JavaScript的概念。您打印的值將採用html編碼。如果ViewBag.somedata包含一個數字,你的HTML會是這樣的:

var stuff = 42; 

當它是一個小數和你的文化使用逗號爲:

var stuff = 4,2; 

如果它包含一個字符串,它會看起來像這樣:

var stuff = Hello, world!; 

如果它被一些魔法包含一個有效的JavaScript對象初始化:

var stuff = { foo: bar }; 

但通常,它會只打印類型名稱引用類型:

var stuff = System.Collections.Generic.List`1[string]; 

幾乎所有上面的例子將無法正常工作。所以,你需要使用引號:

var stuff = '@ViewBag.somedata'; 

但後來還是你的數據將是HTML編碼,所以如果你想要一個C#引用類型轉換爲JSON並將其賦值給一個JavaScript變量,這樣做的解釋在How do I write unencoded Json to my View using Razor?

var stuff = @Html.Raw(Json.Encode(Model.PotentialAttendees)); 
+0

感謝這個好的解釋!但是,如果ViewBag.somedata包含json字符串格式呢?我仍然必須使用json編碼嗎? – Michael

1

它將是字符串。如果您想將其轉換爲javascript可識別的,您可能必須使用eval

+0

eval?我正在使用剃鬚刀引擎。 – Michael