以下是在发送到浏览器之前(在回调期间)在C#中获取HtmlEncoded的文本。收到后,在Javascript中我会myDiv.innerHTML = theStringBelow
;
<span xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:SharePoint="Microsoft.Sharepoint.WebControls"
xmlns:ext="my_namespace:my_xslt_extension">Some text to be shown.</span>
然而,结果是我只看到上面显示的确切文字。它不被视为添加到DOM的html元素,而是纯文本。当我通过javascript添加完全相同的文本时(例如,我跳过回调,只说myDiv="exactString
“),它会被正确添加(它被视为跨度)。
发生了什么事?我必须取消编码吗?我不应该编码开始吗?
修改 这个问题仍然代表着好奇心,但我只是通过HtmlEncoding数据来解决这个问题。早期的问题必须添加到这个问题上,让我觉得HtmlEncoding仍然是必要的。
答案 0 :(得分:2)
如果要成为HTML节点,则不应HTMLEncode
。 HTML编码的作用是将您的字符串从上面转换为:
<span xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:SharePoint="Microsoft.Sharepoint.WebControls"
xmlns:ext="my_namespace:my_xslt_extension">Some text to be shown.</span>
尝试按原样传入字符串。你当然必须逃避字符串。但是一旦它成为JavaScript中的一个字符串,它应该被转义,因为它被制作成内存中的字符串。然后,您应该能够进行div.innerHTML
调用并获得预期结果。可以通过执行以下操作来完成字符串的转义:
// in your .cs code-behind/view/whatever.
string = string.replace("""", "\""");
哪个应该产生:
<span xmlns:asp=\"http://schemas.microsoft.com/ASPNET/20\"
xmlns:SharePoint=\"Microsoft.Sharepoint.WebControls\"
xmlns:ext=\"my_namespace:my_xslt_extension\">Some text to be shown.</span>
然后你可以这样输出:
// in your webform/view
<script type="text/javascript">
var mystring;
mystring = "<%=string;%>";
</script>
让我知道这对你有用。
答案 1 :(得分:0)
HTML Encode会将<
变为<
,依此类推。这打破了HTML格式化,因此使用了这样的文本块:
Insert <name> here
不会这样:
Insert here
如果您的意图是直接将<span ...
插入到html中,您需要在出路时不对其进行编码,或者如果这会中断传输,则需要在设置之前在js中对其进行解码.innerHTML
部分。