奇怪的是,之前没有人问过这个......
我正在为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作为模板引擎,如果这很重要的话。
答案 0 :(得分:8)
建议:创建您想要的文件,按照您想要的方式命名,例如&#34; my_template.html&#34; 然后将此文件添加到您的项目中。
单击它,然后在属性窗口中选择&#34; Build Action&#34;并将其设置为&#34; Embedded Resource&#34;。
每当您想要访问此文件时,您都可以使用类似的内容( no with proper block :
public static string ReadTextResourceFromAssembly(string name)
{
using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
{
return new StreamReader( stream ).ReadToEnd();
}
}
根据您的需求量身定制。上面的方法获取资源,比如说你已将资源放在项目MyProject
中的子目录&#34; HtmlTemplates中并调用它&#34; my_template.html&#34;然后你可以通过名称
MyProject.HtmlTemplates.my_template.html
然后您可以将其写入文件或直接使用,等等。
这有一些主要的好处:您在项目中看到 项目中的html文件,它具有html扩展名,因此在Visual Studio中对其进行编辑时会突出显示语法并将所有工具应用于.html文件。< / p>
我有一堆用于单元测试的方法,这个方法将数据提取到文件中:
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 );
}
}
}
答案 1 :(得分:5)
将encoded html
放入.resx
文件,然后使用
html
@Html.Raw(Server.HtmlDecode(...resource...));
答案 2 :(得分:2)
这就形成了我的作品
<td class="red" colspan="2" align="center">
<span style="color: #b01c1c;">
<strong>@Html.Raw(Resources.Listino.Cassette</strong>
</span>
</td>
Listino资源文件中的
答案 3 :(得分:1)