2011-05-02 53 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