[英]Using ' inside a c# string that launch a javascript function
我希望這樣做:
ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "alert('Vous n'avez pas les droits d'accès à cette application.');", true);
沒有'
:沒有辦法制定這句法語句子:
'Vous n'avez pas les droits d'accès à cette application.'
Javascript失敗,因為(可能)遇到該字符時,它期望它是字符串的結尾。
我嘗試過很多像\\'
和'''
的東西,但是......沒有運氣......
你可以嘗試這個:
"alert(\"Vous n'avez pas les droits d'accès à cette application.\");"
為什么會這樣?
例如,嘗試在瀏覽器的控制台中鍵入此內容(按F12轉到開發人員工具,然后單擊控制台選項卡)
alert('Vous n'avez pas les droits d'accès à cette application.');
你會注意到'Vous n'被解釋為一個字符串,當然你會; 得到你在答案中提到的錯誤。 這可以幫助您想象上述內容。
您希望客戶端接收的是JavaScript字符串,其值為
Vous n'avez pas les droits d'accès à cette application.
要在JavaScript中創建具有該值的字符串,JS字符串文字必須是:
1 "Vous n'avez pas les droits d'accès à cette application." ^ ^
要么
2 'Vous n\\'avez pas les droits d\\'accès à cette application.' ^ ^
這是因為您需要使用不同的引號字符,或者轉義文字中的字符。
您要發送給客戶端的是JS字符串文字的值 (參見上面的1和2)。
要創建具有這些值之一的C#字符串,您需要轉義C#中的特殊字符:
@"alert(""Vous n'avez pas les droits d'accès à cette application."");"
^ ^^ ^^
要么
"alert('Vous n\\'avez pas les droits d\\'accès à cette application.');"
^^ ^^
要么
@"alert('Vous n\'avez pas les droits d\'accès à cette application.');"
^ ^ ^
要么
@"alert('Vous n\\'avez pas les droits d\\'accès à cette application.');" ^ ^ ^
這種技術稱為雙重轉義,重要的是跟蹤您需要具有的值 ,並轉義任何特殊字符以實現該值。
如您所見,這可能有點棘手。 有些實用程序和類可以幫助自動,更重要的是,正確地將字符串轉換為您需要編碼的任何格式/語言/編碼。
JavaScriptSerializer
是一個簡單的,在這種情況下可能會有所幫助。
所有人都說,根據我的經驗,雙重逃避問題是一個紅旗,你沒有正確構建你的代碼。 在這種情況下,您有一行代碼正在向客戶端發送消息,並且您將內容嵌入到功能中。 當您嘗試更改它並再次遇到雙重轉義問題時,這可能會讓您頭疼。 在這種情況下,我建議使用[data-*]
屬性發送數據,然后讓ScriptManager
調用一個讀取數據並正確通知用戶的函數。
或者,當您想要更改文本或重構時,額外的模板化步驟可以在將來節省一些麻煩:
var message = "Vous n'avez pas les droits d'accès à cette application."; var jss = new JavaScriptSerializer(); var encodedMessage = jss.Serialize(message); ScriptManager.RegisterStartupScript( this, this.GetType(), Guid.NewGuid().ToString(), string.Format("alert({0});", encodedMessage), true);
你想要的Javascript輸出是這樣的(正確轉義'
):
alert('Vous n\'avez pas les droits d\'accès à cette application.');
所以你應該在你的字符串中放置一個\\
。 因為\\
是轉義字符,所以你必須再次轉義它才能成為文字\\
字符:
ScriptManager.RegisterStartupScript
( this
, this.GetType()
, Guid.NewGuid().ToString()
, "alert('Vous n\\'avez pas les droits d\\'accès à cette application.');"
, true
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.