Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将HTML代码放入.resx资源文件中?_C#_Html_Asp.net_Internationalization_Resx - Fatal编程技术网

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

C# 如何将HTML代码放入.resx资源文件中?,c#,html,asp.net,internationalization,resx,C#,Html,Asp.net,Internationalization,Resx,奇怪的是,以前没人问过这个 我正在为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/ht

奇怪的是,以前没人问过这个

我正在为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” 然后将此文件添加到项目中

单击它,然后在属性窗口中选择“Build Action”,并将其设置为“Embedded Resource”

无论何时,只要您想访问此文件,都可以使用类似于以下内容的内容(否和正确的使用块:

根据您的需要对其进行定制。上述方法获取资源,假设您已将资源放在项目
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 );
            }
        }
    }

编码的html
放入
.resx
文件中,然后使用

@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>

@Html.Raw(Resources.Listino.caste
在Listino资源文件中:
嗯,我找到了这样一种方法:

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

请参阅以下图片:


comiler到底抱怨什么?如何将HTML/XML文件添加到资源文件中?如果没有人知道如何添加,您可以编写一个“序列化程序”"为了使代码不再像“to#le”那样是html代码,并且在获取数据时可以将其还原为一个较小的符号。如果没有找到解决此问题的其他解决方案,希望这会有所帮助。您还应该使用-块将
封装在
中,以便正确处理。@Aschratt,感谢hinting、 在我的第一个方法中,不知何故我错过了这个。现在修复它。我怀疑它是否会起作用。编码的HTML仍然是HTML(所有的尖括号仍然是)。因此它仍然会给我带来麻烦。它似乎不起作用。因为当你输入HTML代码时,它会自动添加新的字符串行。在你的情况下,它是String1。
 <td class="red" colspan="2" align="center">
                    <span style="color: #b01c1c;">
                        <strong>@Html.Raw(Resources.Listino.Cassette</strong>
                    </span>
 </td>