我使用ViewBag或ViewData在動作函數中傳遞一些數據(refernce type或value type)。mvc框架如何將對象解析爲JavaScript對象?
傳遞的數據(ViewData的或ViewBag)我賦予它的JavaScript變量在客戶端:
var stuff = @ViewBag.somedata;
我的問題是什麼樣的變量東西這將是該類型是它Javascript對象?或字符串?或者JSON格式的字符串?
預先感謝您。
我使用ViewBag或ViewData在動作函數中傳遞一些數據(refernce type或value type)。mvc框架如何將對象解析爲JavaScript對象?
傳遞的數據(ViewData的或ViewBag)我賦予它的JavaScript變量在客戶端:
var stuff = @ViewBag.somedata;
我的問題是什麼樣的變量東西這將是該類型是它Javascript對象?或字符串?或者JSON格式的字符串?
預先感謝您。
它會是什麼類型的變量的東西?
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));
的
感謝這個好的解釋!但是,如果ViewBag.somedata包含json字符串格式呢?我仍然必須使用json編碼嗎? – Michael
可能重複[?我怎樣寫未編碼的JSON來使用剃刀我查看](http://stackoverflow.com/questions/4072762/how-do-i-write-unencoded-json -to-my-view-using-razor) –