这似乎非常简单,令人难以启齿。然而,第一个问题是,在将值从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 错误。要解决此问题,您可以将 alert 字符串用双引号(而不是单引号)括起来,或者转义 ' 字符。因此,在您的控制器中,您将拥有以下内容:
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);
@Html.Raw(String.Format("var str = \"{0}"\", ViewBag.str)
,然后跟随alert(str);
。 - defines