2011-05-02 126 views
19

我目前正在ASP.NET MVC中構建一個網站。我想在JavaScript中訪問ViewData。在MVVM中使用ViewData的ASP.NET MVC

有沒有什麼辦法可以在Controller中存儲ViewData的View中使用JavaScript訪問字符串值。 (我無法弄清楚正確的語法)。

我希望做這樣的事情..

 

var str = ViewData["Text"]; 

我試過如下:

無功海峽= <%=計算機[ 「文本」]%>

,但它沒」工作。

有人可以請幫忙。

謝謝。

回答

45

像這樣(剃刀):

var str = @Html.Raw(Json.Encode(ViewData["Text"])); 

或(Web窗體),使用JavaScriptSerializer(和進口theproper命名空間到你的網頁表單後 - System.Web.Script.Serialization):

var str = <%= new JavaScriptSerializer().Serialize(ViewData["Text"])) %>; 

請不要在ASP.NET MVC應用程序中使用ViewData上。使用視圖模型和強類型的意見,使您的代碼如下所示:

var str = <%= new JavaScriptSerializer().Serialize(Model.Text) %>; 

這種技術是更酷因爲現在你可以JSON序列化整個視圖模式:

var model = <%= new JavaScriptSerializer().Serialize(Model) %>; 
var str = model.Text; 
+0

謝謝你的深入解答先生。 – ElvisLives 2011-11-07 18:10:39

10

這應該是:

var str = '<%= ViewData["Text"] %>'; 
+4

不,那是非常糟糕的。切勿在真實世界的應用程序中使用這樣的東西。如果文本包含報價怎麼辦?這段代碼很容易受到XSS攻擊,特別是如果這個文本來自用戶輸入。 – 2011-05-02 22:21:33

+1

他已經很接近了,我認爲回答他的問題比讓問題複雜化更有幫助。 – 2011-05-02 22:29:01

+8

這不是問題的答案!這是對XSS攻擊和廣告不良做法的邀請。我們不是在說這裏過於複雜。我們正在談論回答這個問題。你怎麼可能說這回答了這個問題?我的意思是這個代碼很快就會中斷,而且它還會受到關於SO的另一個問題的影響。我不能相信這個問題是有效的,你還沒有刪除它,所以它不會被索引,因爲有人可能實際上在他的應用程序中使用它。 – 2011-05-02 22:31:49