使用aspx渲染引擎生成非HTML
-
03-07-2019 - |
题
是否可以使用asp模板引擎(使用部分代码隐藏类,动态<%...%> 块等)生成非 HTML?我想要一种干净且可维护的方式来动态生成代码。(具体来说,我想生成用数据库中的值填充的 LaTeX 代码。)
目前,我的 LaTeX 模板是带有占位符的资源字符串,我将其替换为数据库值。该解决方案很快变得非常难以维护和清洁。我真的很想使用 aspx 标记中的动态块,但我不确定 a) 当输出不是 HTML 时 aspx 是否会抛出异常,或者 b) 如何将结果实际渲染到 .tex 文件中。
生成代码本身位于 C# .dll 中。我们正在使用 .NET 3.5
这可能吗?提前致谢。
解决方案
Visual Studio 2008 本身附带的 T4 模板或 Visual Studio 2005 SDK 附带的 T4 模板,您几乎可以生成您想要的任何内容。
您可以通过以下链接了解更多信息:
- 斯科特·汉塞尔曼的博客
- 罗布·康纳利的博客
- 奥列格·西奇的博客 这是 T4 示例的完整存储库
- 约翰·丹福斯的博客
我非常确定所有这些链接都是您探索的良好开端。
如果您想在 Visual Studio 之外生成 T4 模板,可以使用自定义 MSBuild 任务来调用 T4 模板(关联)
以下是 MSBuild 任务的“执行”代码示例。 点击此处查看源代码:
public override bool Execute()
{
bool success = false;
//read in the template:
string template = File.ReadAllText(this.TemplatePath);
//replace tags with property and item group values:
ProjectHelper helper = new ProjectHelper(this);
template = helper.ResolveProjectItems(template);
//copy the template to a temp file:
this._tempFilePath = Path.GetTempFileName();
File.WriteAllText(this._tempFilePath, template);
//shell out to the exe:
ProcessHelper.Run(this, TextTransform.ToolPath, TextTransform.ExeName, string.Format(TextTransform.ArgumentFormat, this.OutputPath, this._tempFilePath));
success = true;
return success;
}
其他提示
我不明白为什么不。我在以前的工作中认识的人使用ASP.NET页面创建了一个数据库包装器生成器,并使用转发器控件来插入属性。然后他将文档内容写到源文件中。
如果您担心ASP.NET会出现问题,那么您可以创建一个非常有限的测试用例并亲自查看。不应该花很多时间来测试一个理论,并告诉你它是否符合你的需求。
这当然是可能的。大多数服务器控件都会出局,因为它们会自动发出HTML标记。但是,您可以对页面进行数据绑定并使用数据绑定表达式。 Visual Studio无疑会抱怨无效标记。
然后,您必须通过Cassini或ASP.NET管道运行页面才能获得输出。我在某个地方有一个单元测试工具,这非常容易。
更好的想法可能是使用代码生成器。像CodeSmith这样的东西应该可以很好地工作,甚至Visual Studio内置的 T4 为您提供了很大的灵活性,而不是试图将您绑定到HTML。
对于代码生成,您应该查看T4模板功能。 它使用类似于ASP.Net的语法。
参见Scott Hanselmans Post: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
是的,你可以。只需创建一个标准的.aspx页面,删除所有HTML并在页面中放置您想要的任何内容。然后你可以使用<!> lt; %% <!> gt;用于在页面中放置动态内容的标记。和Jason Z说的一样,你可以使用Repeater控件迭代项目集合,在<!> quot; page <!>中列出。此外,由于它们生成HTML,您将无法使用所有其他服务器控件,但您仍可以根据需要创建自己的服务器控件和/或用户控件。