![](/img/trans.png)
[英]ASP.NET: Illegal character '@' in '@Html.Raw' call
[英]Store Html.Raw() in a string in Javascript, ASP.NET MVC 3
我正在使用 ASP.NET 并且数据库中有一个字符串 HTML。
我想将 html 放入客户端的一个变量中。
如果我这样做:
var x = '@Html.Raw(myModel.FishValue)'
它工作正常,因为它本质上是在做
var x = '<p>hello!</p>';
但是,如果 html 中有引号,它会破坏页面。
我最初的猜测是 to.Replace 原始字符串以将转义添加到引号中,但是.ToString()
和.ToHtmlString()
(因为 Html.Raw 返回 IHtmlString)不会产生与简单Html.Raw()
。
所以我不知道该怎么做。
在调用Html.Raw
方法之前替换怎么样?
var x = '@Html.Raw(myModel.FishValue.Replace("'","\\'"))'
更新:
来自 model 的字符串中可能还有其他转义字符。因此,我建议也先替换斜杠。 当然,这完全取决于您的 model 中的服务器可能提供的内容。
var x = '@Html.Raw(myModel.FishValue.Replace("\\","\\\\'").Replace("'","\\'"))'
表示 javascript 中行为的示例片段:
//Let's say my Model Content is > I'd Say \ is a escape character. You can't "Escape" // YOu would have to replace ' --> \' and \ --> \\ var stringFromServer = 'I\'d Say \\ is a escape character. You can\'t "Escape"' alert(stringFromServer)
试试这个:
var x = '@(System.Web.HttpUtility.HtmlEncode(myModel.FishValue))';
如果您需要在客户端解码 HTML,请使用
unescape(x)
我认为 JQuery(不确定您是否正在使用它)处理编码的 HTML 字符串,因此您可能不需要 unescape()。
试用 Microsoft 的反 xss 库(我相信默认情况下将包含在 asp.net 4.5 中):
AntiXss.JavascriptEncode(yourContent)
Anti-Xss 4.1 beta 可用。 如果您想在我强烈推荐的应用程序中使用它,请查看: http://weblogs.asp.net/jgalloway/archive/2011/04/28/using-antixss-4-1-beta-as-the -默认编码器-in-asp.net.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.