如何将 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()
方法。
请看下图:
奇怪,之前没有人问过这个问题....
我正在为 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()
方法。
请看下图: