Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将带有单个Qoute的字符串从MVC Razor传递到JavaScript_Javascript_Asp.net Mvc_Razor_Viewbag - Fatal编程技术网

将带有单个Qoute的字符串从MVC Razor传递到JavaScript

将带有单个Qoute的字符串从MVC Razor传递到JavaScript,javascript,asp.net-mvc,razor,viewbag,Javascript,Asp.net Mvc,Razor,Viewbag,这看起来很简单,很尴尬。然而,第一个问题是,当MVC3.0(Razor)中的新ViewBag将值传递到JavaScript块时,这是正确的方法吗?更重要的是,您在何处以及如何应用正确的字符串替换代码来防止单个引号变成',如下面的结果警报所示 将其添加到单个脚本块中: alert('@ViewBag.str') // "Hi, how's it going?" 导致以下警报: Razor将HTML编码所有内容,以防止“被编码为',您可以使用 alert('@Html.Raw(Vi

这看起来很简单,很尴尬。然而,第一个问题是,当MVC3.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#

Javascript

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

如果您不想重新转义字符串,请尝试
@Html.Raw(String.Format(“var str=\”{0}“\”,ViewBag.str)
然后是
警报(str);
这对脚本注入来说不是一个巨大的风险吗?
var j = @Html.Raw(ViewBag.str);
alert (j[0].Text);