【问题标题】:ASP.NET MVC using ViewData in javascriptASP.NET MVC 在 JavaScript 中使用 ViewData
【发布时间】:2023-03-26 13:38:01
【问题描述】:

我目前正在用 ASP.NET MVC 构建一个网站。我正在尝试在 javascript 中访问 ViewData。

有什么方法可以让我在控制器操作中存储在 ViewData 中的视图中使用 javascript 访问字符串值。 (我无法弄清楚正确的语法)。

我想做类似的事情..

var str = ViewData["Text"];

我尝试了以下方法:

var str =

但是没有用。

有人可以帮忙吗。

谢谢。

【问题讨论】:

    标签: javascript asp.net-mvc


    【解决方案1】:

    像这样(剃刀):

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

    或(WebForms),使用JavaScriptSerializer(在将正确的命名空间导入您的网络表单后 - 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;
    

    【讨论】:

    • 感谢先生的深入解答。
    • 这是一篇很老的帖子,但我会试试运气:你会把代码放在哪里?在@section Scripts 内部,@Html... 之类的东西不起作用
    • var str = @Html.Raw(Json.Encode(ViewData["Text"])); 完美!
    【解决方案2】:

    应该是:

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

    【讨论】:

    • 不,那很糟糕。永远不要在现实世界的应用程序中使用这样的东西。如果文本包含引号怎么办?此代码很容易受到 XSS 攻击,尤其是如果此 Text 来自用户输入。
    • 他已经如此接近了,我认为回答他的问题比让它过于复杂更有帮助。
    • 这不是问题的答案!!!这是对 XSS 攻击和广告不良做法的邀请。我们在这里不是在谈论过度复杂化。我们正在谈论回答这个问题。你怎么可能说这回答了这个问题?我的意思是这段代码很快就会中断,它将受到关于 SO 的另一个问题的影响。我不敢相信这个问题被赞成了,而你还没有删除它,所以它不会被索引,因为有人可能会在他的应用程序中实际使用它。
    • 您的答案显然适用范围更广。鉴于您在此处和您自己的答案中的 cmets,我相信如果他希望在他的 ViewData 中使用撇号或用户生成的数据,他会理解编码和转义。我也相信他看到自己的错误,更简单的代码很有价值。
    • 我同意。 Darin's 是正确的答案 - 但也很高兴了解另一种(尽管“不推荐”)方式。为你们俩 +1。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多