我开始学习MVC,并且想要使用KnockOut.js
我无法理解为什么新的@include标记会将所有内容编码为HTML(编辑:好吧我现在知道要防止XSS)..但更糟糕的是如何阻止它做到这一点..
我有这段代码。
@{
ViewBag.Title = "Home Page";
var myData = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
}
<script type="text/javascript">
var initialData = @myData ;
哪个产生此来源
<script type="text/javascript">
var initialData = [{"Title":"Tall Hat","Price":49.95},{"Title":"Long Cloak","Price":78.25}] ;
确定。所以尝试使用HttpUtility.HtmlDecode
..并且javascript中包含的位没有任何反应,因为剃刀引擎正在重新编码它?但如果它使用编码然后重新编码编码html .. briallinat。
我无法弄清楚如何停止编码。
msdn说使用@:
但是这在javascript块中不起作用,我甚至尝试过
@{ @:new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);}
这只是一些奇怪的东西并导致其他错误。
如何在MVC模型中完成?
在aspx中使用
var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;
工作得很好..
答案 0 :(得分:4)
Html.Raw(string)将以原始的未编码形式写出你的字符串。如果您的字符串未编码为开头。
请求的代码示例(?!?!)
@{
ViewBag.Title = "Home Page";
var myData = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
}
<script type="text/javascript">
var initialData = @Html.Raw(myData) ;
答案 1 :(得分:1)
MVC(或本例中的Razor视图引擎)默认情况下使用MvcHtmlString将所有字符串编码为HTML字符串。要绕过它,请使用:
<script type="text/javascript">
var initialData = "@MvcHtmlString.Create(myData)";
</script>
然后假设你的字符串已被编码。