2010-09-21 7 views
5

Ho bisogno di sfuggire a una doppia citazione in linea C# all'interno di javascript. Codice è qui sotto:Escaping una doppia virgola nello script inline C# all'interno di javascript

if ("<%= TempData["Message"]%>" == "") { 
    // code 
}; 

Normalmente, vorrei solo usare apici in questo modo:

if ('<%= TempData["Message"]%>' == "") { 
    // code 
}; 

Tuttavia, TempData["Message"] ha virgolette singole all'interno di esso (quando contiene un link generato dal Html.ActionLink () helper in ASP.NET MVC). Così, mentre potevo cambiare tutti gli helper di ActionLink all'interno di TempData["Message"] in tag, è un problema interessante e mi piacerebbe sapere se qualcuno ha una risposta.

risposta

8

Chiama HttpUtility.JavaScriptStringEncode.
Questo metodo è nuovo per ASP.Net 4.0; per le versioni precedenti, utilizzare WPL.

+0

Hmm, non ho .NET 4. Che cosa fa? – ajbeaven

+0

Sfugge a un sacco di personaggi. Usa WPL. – SLaks

+1

Ajax.JavaScriptStringEncode sembrava funzionare. Qualche commento? – ajbeaven

0

Ho affrontato questo scrivendo un HtmlHelper che codifica le stringhe ad un formato accettabile in Javascript:

public static string JSEncode(this HtmlHelper htmlHelper, string source) 
{ 
    return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />"); 
} 

Quindi, secondo lei:

if ('<%= Html.JSEncode(TempData["Message"]) %>' == "") { 
    // code 
}; 
+0

Questo è molto sbagliato. Non dovresti sostituire '\ r' con'
'tag, e ci sono più caratteri che devi sfuggire. – SLaks

+0

In particolare: backslash stesso (altrimenti '\" 'è scappato a' \\ "' e interrompe la stringa con implicazioni sulla sicurezza) e altri caratteri di nuova riga. – bobince

+0

Questo è ciò che funziona per me e i messaggi che ho bisogno di codificare. Sentiti libero di adattarti alle tue esigenze individuali – Clicktricity

2

È possibile utilizzare il metodo AjaxHelper.JavaScriptStringEncode all'interno una vista Razor, come questa:

if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") { 
    // do stuff 
} 

Se è troppo prolisso, creare t il suo piccolo aiutante in /App_Code/JS.cshtml

@helper Encode(string value) { 
    @(HttpUtility.JavaScriptStringEncode(value)) 
} 

che sarà poi possibile chiamare da qualsiasi vista:

@JS.Encode("'single these quotes are encoded'") 
Problemi correlati