簡體   English   中英

使用'inside ac#string啟動javascript函數

[英]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.\");"

為什么會這樣?

  • 撇號字符',應包括在雙引號中。 否則,如果使用撇號並在它們之間放置字符串,則JavaScript引擎無法正確插入字符串。
  • 我們使用反斜杠字符,以便在C#中正確定義我們的字符串,避免使用雙引號,當我們要聲明字符串時。 形式上,這稱為特殊字符轉義。 請看這里

例如,嘗試在瀏覽器的控制台中鍵入此內容(按F12轉到開發人員工具,然后單擊控制台選項卡)

alert('Vous n'avez pas les droits d'accès à cette application.');

你會注意到'Vous n'被解釋為一個字符串,當然你會; 得到你在答案中提到的錯誤。 這可以幫助您想象上述內容。

JS部分

您希望客戶端接收的是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.' ^ ^ 

這是因為您需要使用不同的引號字符,或者轉義文字中的字符。

C#部分

您要發送給客戶端的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM