带有重音字母的C#Mvc resx转义问题

时间:2016-05-16 13:52:37

标签: c# asp.net-mvc html-escape-characters

我在Web项目中使用资源文件,有时候我会使用带有html编码的重音字母和aphostrophes。

所以不是这个

Errore: non c'è nessun itemKey definito. L'esecuzione della pagina verrà interrotta..

我看到了这个

Errore: non c'è nessun itemKey definito. L'esecuzione della pagina verrà interrotta..

我知道Html.Raw()可以做到这一点,但我想知道是否有一些选项可以在web配置中设置以跳过默认的转义?否则我将被迫在任何地方添加Html.Raw()

我以这种方式添加资源:

@(WmXRexManager.WebResxManager.GetString<SharedVerificationResx>(
    () => SharedVerificationResx.ErrorNoItemKey));

WebResxManagerGetString<T>()方法无关紧要,因为在调试时正确检索了资源字符串。

1 个答案:

答案 0 :(得分:2)

它没有明确说明,但我想知道字符串被转义的上下文。

如果您将此表达式用作常规HTML内容,则转换是正确的。 (但你不需要结束分号)

我的猜测是(假设使用某些JS错误处理输出错误消息)您在JavaScript中呈现字符串,并且您需要区分HTML编码和JavaScript编码,因为它们在某些情况下有所不同。

我使用HtmlHelper扩展方法

[^(<any_tag>)] match a single character not present in the list below
(<any_tag>) a single character in the list (<any_tg>) literally (case insensitive)

允许简单地编写 public static IHtmlString JsString<TModel>(this HtmlHelper<TModel> html, string s) { return html.Raw(HttpUtility.JavaScriptStringEncode(s)); } 并将JavaScript字符串转义(当然,在JS字符串引号内)。