Отображение текста из resources.resx в JavaScript - PullRequest
12 голосов
/ 08 февраля 2012

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

@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; и выглядит хорошо, но это все еще не ответ на мой вопрос.

Ответы [ 4 ]

17 голосов
/ 08 февраля 2012

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

1 голос
/ 15 марта 2016

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

var label = '@Html.Raw(Resource.ResourceName)';
1 голос
/ 08 февраля 2012

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

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

<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);

В браузере тег «result» показывает оба корректно (по вашему желанию), тогда как «other» показывает его с экранированным символом.И ОБА оповещения показывают это с экранированным символом.

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

0 голосов
/ 01 октября 2013

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

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

Может быть, это поможет.

ОБНОВЛЕНИЕ

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

1. Когда текст помещается как обычное содержимое html, то метод @ Html.Raw просто помогает и записывает символ 'ó' без HTML-кодировки (не как: ó)

пример:

<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 преобразует его в: - и @ Html.Raw вообще не помогает

пример:

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

Йо можно исправить, поместив весь тегРесурсу (как в этом посте) или строке (как в моем примере)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...