cshtml/vbhtml 和新的 @ 包含服务器端数据,但没有编码?
我开始学习 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) %>;
工作正常..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Html.Raw(string) 将以原始、未编码的形式写出字符串。前提是您的字符串一开始就没有编码。
根据要求的代码示例(?!?!)
Html.Raw(string) will write out your string in its raw, unencoded form. Provided your string is not encoded to begin with.
code example as requested (?!?!)
MVC(或本例中的 Razor 视图引擎)使用 MvcHtmlString。要解决这个问题,请使用:
然后假设您的字符串已经被编码。
MVC (or the Razor view engine in this case) encodes all your strings as a HTML string using the MvcHtmlString by default. To get around it, use:
This then assumes your string has already been encoded.