ASP.NET MVC在javascript中使用ViewData

Jak*_*ake 27 javascript asp.net-mvc

我目前正在ASP.NET MVC中构建一个网站.我试图在JavaScript中访问ViewData.

有没有办法在View Controller中的ViewData中使用javascript访问字符串值.(我无法弄清楚正确的语法).

我想做点什么......


var str = ViewData["Text"];

我尝试了以下方法:

var str = <%= ViewData ["Text"]%>

但它不起作用.

有人可以请帮助.

谢谢.

Dar*_*rov 56

像这样(剃刀):

var str = @Html.Raw(Json.Encode(ViewData["Text"]));
Run Code Online (Sandbox Code Playgroud)

或(WebForms),使用JavaScriptSerializer(以及将proper命名空间导入webform后System.Web.Script.Serialization):

var str = <%= new JavaScriptSerializer().Serialize(ViewData["Text"])) %>;
Run Code Online (Sandbox Code Playgroud)

请不要在ASP.NET MVC应用程序中使用ViewData.使用视图模型和强类型视图,以便您的代码如下所示:

var str = <%= new JavaScriptSerializer().Serialize(Model.Text) %>;
Run Code Online (Sandbox Code Playgroud)

这种技术甚至更酷,因为现在您可以JSON序列化整个视图模型:

var model = <%= new JavaScriptSerializer().Serialize(Model) %>;
var str = model.Text;
Run Code Online (Sandbox Code Playgroud)


Dav*_*ard 10

那应该是:

var str = '<%= ViewData["Text"] %>';
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题的答案!这是对XSS攻击和广告不良行为的邀请.我们不是在谈论过于复杂的问题.我们正在谈论回答这个问题.你怎么能说这回答了这个问题呢?我的意思是这个代码很快就会破解,并且还会受到另一个问题的影响.我无法相信这个问题已经被投票,你还没有删除它,因此它没有被索引,因为有人可能在他的应用程序中实际使用它. (8认同)
  • 不,那非常糟糕.不要在现实世界的应用程序中使用这样的东西.如果文本包含引号怎么办?此代码非常容易受到XSS攻击,特别是如果此Text来自用户输入. (4认同)
  • 他已经“如此”接近了,我认为回答他的问题比让问题变得过于复杂更有帮助。 (2认同)
  • 您的答案显然适用范围更广。鉴于您在这里的评论和您自己的答案,我确信如果他希望在 ViewData 中出现撇号或用户生成的数据,他会理解编码和转义。我也相信他看到自己的错误,更简单的代码是有价值的。 (2认同)
  • 我同意.Darin是正确的答案 - 但是知道另一个(虽然"不推荐")的方式也是很好的.给你们两个+1. (2认同)