2011-03-23 41 views
0

接下来是一段在C#中被HtmlEncoded发送到浏览器(在回调期间)的文本。一旦收到,在JavaScript中,我做myDiv.innerHTML = theStringBelow;C#HtmlEncode,然后使用.innerHTML插入Javascript

<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仍然是必要的。

回答

2

你不应该HTMLEncode它,如果它是成为HTML节点。 HTML编码将做的是把你的字符串从上面变成这个:

&lt;span xmlns:asp="http://schemas.microsoft.com/ASPNET/20" 
    xmlns:SharePoint="Microsoft.Sharepoint.WebControls" 
    xmlns:ext="my_namespace:my_xslt_extension"&gt;Some text to be shown.&lt;/span&gt; 

尝试传递字符串,因为它是。你当然必须逃避绳子。但是一旦它变成了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> 

让我知道这是怎么解决你的。

+0

当我使用上面的span时,一切正常。然而,当我有真实的数据时,我收到一个错误,说“未终止的字符串常量”。这是否意味着我在服务器端形成了一个糟糕的字符串,然后我将其丢弃到客户端?或者我需要以某种方式首先逃避服务器上的字符串? ..顺便说一句,就像我说的,我给的例子,工作正常,并从服务器发送它。无论如何,感谢您的帮助。 – KyleM 2011-03-24 00:02:50

+0

如果您的数据已经被转义,那么当您尝试再次转义时,可能会看到此错误。但没有看到你的实际执行情况,我不能肯定地说。 – sholsinger 2011-03-24 00:07:28

+0

另外,@KyleM我需要知道什么系统正在产生该错误。这是JavaScript错误还是C#编译器错误? – sholsinger 2011-03-24 03:29:58

0

HTML编码将变成<&lt;等等。这打破了HTML格式和使用这样的文本块这样的:

Insert <name> here 

不变成这样:

Insert here 

如果你的目的是让<span ...得到插入到HTML直接和您或者需要在出路时不对其进行编码,或者如果这会中断传输,则需要在设置.innerHTML部分之前以js对其进行解码。

+0

感谢您的回复,这是丰富的。虽然你没有提到*如何在js中对它进行解码..但是,我已经将它标记为答案,因为我至少已经确认我没有发疯。 – KyleM 2011-03-23 23:44:21

+0

@KyleM:更新了javascript中的函数链接。 – Aren 2011-03-23 23:49:40

+1

更新不正确; 'unescape'用于URL解码,而不是HTML解码。没有用于编码或解码HTML编码字符串的本机JavaScript函数。 – Jacob 2011-03-23 23:54:39