这看起来很简单,令人尴尬。但是,第一个问题是当将值从 MVC 3.0 (Razor) 中的新 ViewBag 传递到 JavaScript 块时,这是正确的方法吗?更重要的是,您在哪里以及如何应用正确的字符串替换代码来防止单引号变成 ',如下面的结果警报中所示?
将此添加到单个脚本块中:
alert('@ViewBag.str') // "Hi, how's it going?"
导致以下警报:
这看起来很简单,令人尴尬。但是,第一个问题是当将值从 MVC 3.0 (Razor) 中的新 ViewBag 传递到 JavaScript 块时,这是正确的方法吗?更重要的是,您在哪里以及如何应用正确的字符串替换代码来防止单引号变成 ',如下面的结果警报中所示?
将此添加到单个脚本块中:
alert('@ViewBag.str') // "Hi, how's it going?"
导致以下警报:
Razor 将对所有内容进行 HTML 编码,因此为了防止 ' 被编码为'
,您可以使用
alert('@Html.Raw(ViewBag.str)');
但是,现在您的字符串中间有一个实际的 ' ,这会导致 javascript 错误。为了解决这个问题,您可以将警报字符串用双引号(而不是单引号)括起来,或者转义 ' 字符。因此,在您的控制器中,您将拥有
ViewBag.str = "Hi, how\\'s it going?";
使用 JSON 字符串的另一种解决方案:
C#
ViewBag.str = "[{\"Text\":\"Hi, how's it going?\"}]";
Javascript
var j = @Html.Raw(ViewBag.str);
alert (j[0].Text);