2011-03-23 68 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