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

C# Mvc resx escape issue with accented letters

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

所以不用这个

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>() 方法无关,因为在调试时正确检索资源字符串。

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

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

我的猜测是(假设错误消息是使用一些JS错误处理输出的)你在JavaScript中渲染字符串,你需要区分HTML编码和JavaScript-编码,因为它们在某些情况下不同。

我使用 HtmlHelper 扩展方法

    public static IHtmlString JsString<TModel>(this HtmlHelper<TModel> html, string s)
    {
        return html.Raw(HttpUtility.JavaScriptStringEncode(s));
    }

允许简单地编写 @Html.JSString(stringValue) 并转义 JavaScript 字符串(当然在 JS 字符串引号内)。