这是ASP.NET MVC 3 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
”。
为什么角色'ó''&amp;#243'?我究竟做错了什么?
在HTML标记中,<h1>@Resources.ExampleCompany</h1>
显示正确。
更新
Mark Schultheiss写了一个很好的提示,我的“丑陋的解决方案”是:
var companySample = "@Resources.ExampleCompany";
$('#temp').append(companySample);
alert($('#temp').text());
现在角色是ó
并且看起来不错,但这仍然不能解决我的问题。
答案 0 :(得分:17)
根据HTML Encoding Strings - ASP.NET Web Forms VS Razor View Engine,@
语法自动进行HTML编码,解决方案是使用Raw
扩展名方法(例如@Html.Raw(Resources.ExampleCompany)
)对HTML进行解码。试试看,如果有效,请告诉我们。
答案 1 :(得分:1)
其中一些取决于您对文本的处理方式。
例如,使用标签:
<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);
在浏览器中,“result”标签正确显示(如您所愿),而“other”则显示转义字符。并且两个警报都会以逃脱的角色显示它。
答案 2 :(得分:1)
我有类似的问题,但在我的情况下,我正在从Resource分配一个值到javascript变量。字母ó编码存在同样的问题。之后,这个变量被绑定到一个html对象(正好通过敲除绑定)。在我的情况下,代码给出了一个技巧:
var label = '@Html.Raw(Resource.ResourceName)';
答案 3 :(得分:0)
我使用以下技巧:
<script type="text/javascript">
$('<div/>').html("@Resources.ExampleCompany").text();
</script>
也许会有所帮助。
<强>更新强>
我已经更彻底地测试了Razor的这种行为,我发现:
1.当文本作为html的正常内容放置时,@ Html.Raw方法只是帮助并写入没有html编码的char'ó'(不是:&amp;#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会将其转换为:&amp;#243;和@ Html.Raw完全没有帮助
示例:的
<meta name="description" content="@("ó")" />
哟可以通过将整个标记放到资源(如该帖子中)或字符串(如我的示例中)来修复它
@("<meta name="description" content="ó" />")
所以,有时候有些人可能会对答案帮助其他人而不是他而感到困惑。