2012-02-08 12 views
11

Questo è esempio di codice in :Visualizzazione testo da Resources.resx in JavaScript

@section header 
{ 
    <script type="text/javascript">  
     $(function() { 
      alert('@Resources.ExampleCompany'); 
     }); 
    </script> 
} 

<div> 
    <h1>@Resources.ExampleCompany</h1> 
</div> 

Il codice di sopra di questo è solo un esempio, ma mostra anche il mio problema con la codifica. Questa variabile @ Resources.ExampleCompany è un file Resources.resx con valore ExampleCompany = "Twoja firma/Twój biznes"

In JavaScript, l'avviso mostra la "Twoja firma/Tw&#243;j biznes".

Perché il carattere 'ó' '& # 243'? Che cosa sto facendo di sbagliato?

Nel tag HTML, <h1>@Resources.ExampleCompany</h1> viene visualizzato correttamente.

UPDATE:

Mark Schultheiss ha scritto un buon suggerimento e la mia "brutta soluzione" è:

var companySample = "@Resources.ExampleCompany"; 
$('#temp').append(companySample); 
alert($('#temp').text()); 

Ora il personaggio è &#243; e sembra buono, ma questo non è ancora risposta alla mia problema.

+0

Se avete apostrofi nel testo Risorse vedono: http://stackoverflow.com/a/11650077/878612 – lko

risposta

15

Secondo HTML Encoding Strings - ASP.NET Web Forms VS Razor View Engine, la sintassi @ automaticamente HTML codifica e la soluzione è quella di utilizzare l'estensione metodo Raw (ad esempio, @Html.Raw(Resources.ExampleCompany)) per decodificare il codice HTML. Prova questo e facci sapere se funziona.

+0

Purtroppo funzione unescape non ha aiutato. Forse questa informazione può aiutare a risolvere il mio problema - solo una lettera è codificata che "& # 243", il codice javascript è in un file con markup html. Se @ Resources.ExampleCompany è scritto in markup, il mio char 'ó' viene visualizzato correttamente, ma se scritto in javascript non è corretto. Non so dove sbaglio, forse Razor ha un bug? – stitch7c0

+0

Aggiornato per provare per il lato server. – pete

+0

@ Server.HtmlDecode inoltre non ha aiutato :( – stitch7c0

1

Parte di ciò dipende da COSA fate con il testo.

Ad esempio, utilizzando i tag:

<div id='result'>empty</div> 

<div id='other'>other</div> 

E il codice (dal momento che si sta utilizzando jQuery):

var whatitis="Twoja firma/Tw&#243;j biznes"; 
var whatitisnow = unescape(whatitis); 
alert(whatitis); 
alert(whatitisnow); 
$('#result').append(whatitis+" changed to:"+whatitisnow); 
$('#other').text(whatitis+" changed to:"+whatitisnow); 

Nel browser, il tag "risultato" mostra sia correttamente (come voi desiderio) mentre "l'altro" lo mostra con il personaggio sfuggito. E BOTH gli avvisi lo mostrano con il carattere di escape.

Vedere qui per esempio: http://jsfiddle.net/MarkSchultheiss/uJtw3/.

0

Io uso seguente trucco:

<script type="text/javascript"> 
    $('<div/>').html("@Resources.ExampleCompany").text(); 
</script> 

Forse aiuterà.

UPDATE

Ho testato questo comportamento di Razor più a fondo e ho scoperto che:

1. Quando il testo viene messo come normale contenuto di HTML allora @Html.Metodo Raw aiuta in modo semplice e scrive char 'o' senza codifica html (non come: & # 243;)

esempio:

<div> @Html.Raw("ó") </div> 

esempio:

<script type="text/javascript"> 
    var a = $('<div/>').html('@("ó")').text();// or var a = '@Html.Raw("ó")'; 
    console.log(a); // it shows: ó 
</script> 

2. Ma se viene inserito all'interno di tag html come attributo, Razor lo converte in: & # 243; e @ Html.Raw non aiuta affatto

esempio:

<meta name="description" content="@("ó")" /> 

Yo può risolvere il problema mettendo l'intero tag di risorse (come in questo post) o stringa (come nel mio esempio)

@("<meta name="description" content="ó" />") 

Così, a volte qualcuno avrebbe potuto essere po 'confuso che le risposte aiuta gli altri, ma non lui.

1

Avevo un problema simile, ma nel mio caso stavo assegnando un valore da Risorsa a variabile javascript. C'era lo stesso problema con la codifica - cod.. Successivamente questa variabile è stata vincolata ad un oggetto html (che parla precisamente con il binding a eliminazione diretta). Nella mia situazione sottostante Codice dare un trucco:

var label = '@Html.Raw(Resource.ResourceName)'; 
Problemi correlati