Отображение текста из 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ój biznes
".
Почему символ "-" и "# 243"? Что я делаю не так?
В теге HTML <h1>@Resources.ExampleCompany</h1>
отображается правильно.
UPDATE:
Марк Шульфейс написал хороший намек, и мое "уродливое решение":
var companySample = "@Resources.ExampleCompany";
$('#temp').append(companySample);
alert($('#temp').text());
Теперь символ ó
и выглядит хорошо, но это все еще не отвечает на мою проблему.
Ответы
Ответ 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ó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="ó" />")
Итак, иногда кто-то мог быть немного смущен, что ответы помогают другим, но не ему.