如何将 HTML 代码放入 .resx 资源文件?

How to put HTML code into a .resx resource file?

奇怪,之前没有人问过这个问题....

我正在为 4 种语言创建模板化 HTML 电子邮件。我想将 HTML 模板放入我的 .resx 文件中,以便从代码中轻松、国际化地访问它们。像这样:

.resx 文件:

<data name="BodyTemplate" xml:space="preserve">
    <value><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
            <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
            <title>Title</title>
            ...
        </body>
        </html>
    </value>
</data>

但是,很明显,编译器会抱怨 .resx 文件中的 HTML。 有没有办法在 .resx 文件中使用 HTML(或 XML)。怎么样?

如果重要的话,我正在使用 .NET 版本 4 和 dotLiquid 作为模板引擎。

建议:创建你想要的文件,按照你想要的方式命名,例如"my_template.html" 然后将此文件添加到您的项目中。

点击它,然后在属性中select window "Build Action" 设置为 "Embedded Resource".

无论何时你想访问这个文件,你都可以使用这样的东西(没有正确使用块

    public static string ReadTextResourceFromAssembly(string name)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            return new StreamReader( stream ).ReadToEnd();
        }
    }

根据您的需要量身定制。上面的方法获取资源,假设你把你的资源放在你的项目MyProject的子目录"HtmlTemplates中,并命名为"my_template.html",那么你可以通过名称访问它 MyProject.HtmlTemplates.my_template.html

然后可以写入文件或者直接使用等等

这有一些主要好处:您可以在 项目中看到 html 文件 ,它具有 html 扩展名,因此在 Visual Studio 具有语法高亮显示和适用于 .html 文件的所有工具。

我的单元测试有很多这样的方法,这个方法将数据提取到文件中:

    public static void WriteResourceToFile(string name, string destination)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            if ( stream == null )
            {
                throw new ArgumentException( string.Format( "Resource '{0}' not found", name), "name" );
            }

            using ( var fs = new FileStream( destination, FileMode.Create ) )
            {
                stream.CopyTo( fs );
            }
        }
    }

encoded html 放入 .resx 文件,然后使用

取回 html
@Html.Raw(Server.HtmlDecode(...resource...));

这对我有用: 将所有 html 代码放入值资源文件中,然后使用 @Html.Raw(...) 检索它,就像我在此处所做的那样

 <td class="red" colspan="2" align="center">
                    <span style="color: #b01c1c;">
                        <strong>@Html.Raw(Resources.Listino.Cassette</strong>
                    </span>
 </td>

在 Listino 资源文件中:

好吧,我找到了这样的方法:

首先,我创建了多种语言的局部视图,并将该局部视图的路径放入.resx 个文件中。接下来,我使用资源字符串调用了 @Html.Partial() 方法。

请看下图: