2012-02-08 22 views
11

Este es el código de ejemplo en :texto de resources.resx en JavaScript

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

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

El código anterior que esto es sólo un ejemplo, pero también muestra mi problema con la codificación. Esta variable @ Resources.ExampleCompany es un archivo resources.resx con valor ExampleCompany = "Twoja firma/Twój biznes"

En JavaScript, la alerta muestra el "Twoja firma/Tw&#243;j biznes".

¿Por qué el carácter 'ó' '& # 243'? ¿Qué estoy haciendo mal?

En la etiqueta HTML, <h1>@Resources.ExampleCompany</h1> se visualiza correctamente.

ACTUALIZACIÓN:

Marcos Schultheiss escribió un buen toque y mi "solución fea" es:

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

Ahora el personaje es &#243; y se ve bien, pero esto todavía no es la respuesta a mi problema.

+0

Si tiene apóstrofes en el texto Recursos ver: http://stackoverflow.com/a/11650077/878612 – lko

Respuesta

15

Según HTML Encoding Strings - ASP.NET Web Forms VS Razor View Engine, la sintaxis @ automáticamente HTML codifica y la solución es el uso de la extensión-método Raw (por ejemplo, @Html.Raw(Resources.ExampleCompany)) para decodificar el HTML. Pruébalo y avísanos si eso funciona.

+0

Desafortunadamente función unescape no ayuda. Tal vez esta información puede ayudar a resolver mi problema: solo una letra está codificada como '& # 243', el código JavaScript está en un archivo con marcado HTML. Si @ Resources.ExampleCompany está escrito en marcado, entonces mi char 'ó' se muestra correctamente, pero si está escrito en javascript, no es correcto. No sé dónde buscar error, tal vez Razor tiene un error? – stitch7c0

+0

Actualizado para intentar para el servidor. – pete

+0

@ Server.HtmlDecode tampoco ayudó :( – stitch7c0

1

Parte de esto depende de QUÉ haces con el texto.

Por ejemplo, con las etiquetas:

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

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

Y el código (dado que está utilizando 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); 

En el navegador, la etiqueta de "número" muestra tanto correctamente (como se deseo) mientras que el "otro" lo muestra con el personaje escapado. Y AMBAS alertas lo muestran con el personaje escapado.

Vea aquí por ejemplo: http://jsfiddle.net/MarkSchultheiss/uJtw3/.

0

utilizo siguiente truco:

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

Tal vez pueda ayudar.

ACTUALIZACIÓN

que han probado este comportamiento de la maquinilla de afeitar más a fondo y he encontrado que:

1. Cuando el texto se pone como contenido normal de HTML, entonces @Html.Método prima simplemente ayuda y escribe Char 'O' sin codificación html (no como: & # 243;)

ejemplo:

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

ejemplo:

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

2. Pero si se coloca dentro de las etiquetas html como atributo, entonces Razor lo convierte en: & # 243; y @ Html.Raw no ayuda en absoluto

ejemplo:

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

Puedes solucionarlo poniendo la etiqueta completa de recursos (como en el post) o cadena (como en mi ejemplo)

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

Por lo tanto, a veces alguien podría haber estado un poco confundido de que las respuestas ayudan a los demás pero no a él.

1

Tuve un problema similar, pero en mi caso estaba asignando un valor de Recurso a variable de JavaScript. Hubo el mismo problema con la codificación ó. Posteriormente, esta variable se combinó con un objeto html (hablando con precisión mediante enlace directo). En mi situación continuación Código dar un truco:

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