【问题标题】:Passing strings with Single Qoute from MVC Razor to JavaScript将带有单引号的字符串从 MVC Razor 传递到 JavaScript
【发布时间】:2011-04-21 20:43:22
【问题描述】:

这看起来很简单,令人尴尬。但是,第一个问题是当将值从 MVC 3.0 (Razor) 中的新 ViewBag 传递到 JavaScript 块时,这是正确的方法吗?更重要的是,您在哪里以及如何应用正确的字符串替换代码来防止单引号变成 ',如下面的结果警报中所示?

将此添加到单个脚本块中:

alert('@ViewBag.str')   // "Hi, how's it going?"

导致以下警报:

【问题讨论】:

    标签: javascript asp.net-mvc razor viewbag


    【解决方案1】:

    Razor 将对所有内容进行 HTML 编码,因此为了防止 ' 被编码为 ',您可以使用

    alert('@Html.Raw(ViewBag.str)');
    

    但是,现在您的字符串中间有一个实际的 ',这会导致 javascript 错误。为了解决这个问题,您可以将警报字符串用双引号(而不是单引号)括起来,或者转义 ' 字符。因此,在您的控制器中,您将拥有

    ViewBag.str = "Hi, how\\'s it going?";
    

    【讨论】:

    • 如果您不想重新转义字符串,请尝试 @Html.Raw(String.Format("var str = \"{0}"\", ViewBag.str) 后跟 alert(str);
    • 这不是脚本注入的巨大风险吗?
    【解决方案2】:

    另一种使用JSON字符串的解决方案:

    C#

    ViewBag.str = "[{\"Text\":\"Hi, how's it going?\"}]";
    

    Javascript

    var j = @Html.Raw(ViewBag.str);
    alert (j[0].Text); 
    

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 2016-12-09
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      相关资源
      最近更新 更多