以JavaScript显示resources.resx中的文本



这是ASP.NET MVC 3 Razor:中的示例代码

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

上面的代码只是一个例子,但它也显示了我在编码方面的问题。此变量@Resources.ExampleCompany是一个值为ExampleCompany = "Twoja firma / Twój biznes" 的文件Resources.resx

在JavaScript中,警报显示"Twoja firma / Tw&#243;j biznes"。

为什么字符"ó"&243'?我做错了什么?

在HTML标记中,<h1>@Resources.ExampleCompany</h1>显示正确。

更新:

Mark Schultheiss写了一个很好的提示,我的"丑陋的解决方案"是:

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

现在这个角色是&#243;,看起来不错,但这仍然不能解决我的问题。

根据HTML编码字符串-ASP.NET Web Forms VS Razor View Engine,@语法自动对HTML进行编码,解决方案是使用Raw扩展方法(例如@Html.Raw(Resources.ExampleCompany))对HTML进行解码。试试看,让我们知道这是否有效。

其中一些取决于您对文本的处理。

例如,使用标签:

<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/.

我使用以下技巧:

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

也许这会有所帮助。

更新

我已经更彻底地测试了Razor的这种行为,我发现:

1.当文本被放为html的正常内容时,@html.Raw方法只是有帮助,并在没有html编码的情况下写入char"ó"(不是:&#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="ó" />")

所以,有时有人可能会有点困惑,认为答案对其他人有帮助,但对他没有帮助。

我也遇到过类似的问题,但在我的案例中,我将Resource中的一个值分配给了javascript变量。字母ó编码也存在同样的问题。之后,这个变量被绑定到一个html对象(确切地说是通过敲除绑定)。在我的情况下,下面的代码给出了一个技巧:

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

最新更新