Отображение текста из resource.resx в JavaScript

Это пример кода в ASP.NET MVC Razor:

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

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

Код выше этого - всего лишь пример, но он также показывает мою проблему с кодировкой. Эта переменная @Resources.ExampleCompany представляет собой файл resources.resx со значением ExampleCompany = "Twoja firma / Twój biznes"

В JavaScript предупреждение показывает "Twoja firma / Tw&#243;j biznes".

Почему символ "-" и "# 243"? Что я делаю не так?

В теге HTML <h1>@Resources.ExampleCompany</h1> отображается правильно.

UPDATE:

Марк Шульфейс написал хороший намек, и мое "уродливое решение":
var companySample = "@Resources.ExampleCompany";
$('#temp').append(companySample);
alert($('#temp').text());

Теперь символ &#243; и выглядит хорошо, но это все еще не отвечает на мою проблему.

Ответ 1

Согласно Строки HTML-кода - ASP.NET Web Forms VS Razor View Engine, синтаксис @ автоматически кодирует HTML, и решение должно использовать Raw метод расширения (например, @Html.Raw(Resources.ExampleCompany)) для декодирования HTML. Попробуйте это и сообщите нам, если это сработает.

Ответ 2

Отчасти это зависит от того, что вы делаете с текстом.

Например, используя теги:

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

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

И код (поскольку вы используете 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);

В браузере тег "результат" показывает как правильно (по вашему желанию), тогда как "другое" показывает его с экранированным символом. И BOTH-предупреждения показывают его с экранированным символом.

См. здесь, например: http://jsfiddle.net/MarkSchultheiss/uJtw3/.

Ответ 3

У меня была аналогичная проблема, но в моем случае я назначал значение переменной Resource для javascript. Аналогичная проблема была с буквой - кодировкой. Впоследствии эта переменная была привязана к html-объекту (именно с помощью привязки нокаута). В моей ситуации ниже код дает трюк:

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

Ответ 4

Я использую следующий трюк:

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

Возможно, это поможет.

UPDATE

Я более тщательно тестировал это поведение Razor, и я обнаружил, что:

1. Когда текст помещается как нормальное содержимое html, тогда метод @Html.Raw просто помогает и записывает char '-' без кодировки html (не как: & # 243;)

Пример:

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

Пример:

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

2. Но если он помещен в теги html как атрибут, тогда Razor преобразует его в: & # 243; и @Html.Raw вообще не помогает

Пример:

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

Yo может исправить это, поместив весь тег в Resource (как в этом сообщении) или в строку (как в моем примере)

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

Итак, иногда кто-то мог быть немного смущен, что ответы помогают другим, но не ему.