繁体   English   中英

将 Html.Raw() 存储在 Javascript、ASP.NET MVC 3 中的字符串中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM