使用aspx渲染引擎生成非HTML
是否可以使用 asp 模板引擎(使用部分代码隐藏类、动态 <% ... %> 块等)生成非 HTML? 我想要一种干净且可维护的方式来动态生成代码。 (具体来说,我想生成用数据库中的值填充的 LaTeX 代码。)
目前,我的 LaTeX 模板是带有占位符的资源字符串,我用数据库值进行 string.replace 。 该解决方案很快变得非常难以维护和清洁。 我真的很想使用 aspx 标记中的动态块,但我不确定 a) 当输出不是 HTML 时 aspx 是否会抛出异常,或者 b) 如何将结果实际渲染到 .tex 文件中。
生成代码本身位于 C# .dll 中。 我们正在使用 .NET 3.5
这可能吗? 提前致谢。
Is it possible to use the asp templating engine (With the partial code-behind class, dynamic <% ... %> blocks and such) to generate non HTML? I want to have a clean and maintainable way to generate code dynamically. (Specifically, I want to generate LaTeX code populated with values from a database.)
Currently my LaTeX templates are resource strings with placeholders that I string.replace with the database values. This solution rapidly became very difficult to maintain and clean. I'd really like to use the dynamic blocks from aspx markup, but I'm not sure a) whether aspx will throw a fit when the output isn't HTML, or b) how to actually render the result into a .tex file.
The generating code itself is located in a C# .dll. We're using .NET 3.5
Is this possible? Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Visual Studio 2008 本身附带的 T4 模板或 Visual Studio 2005 SDK 附带的 T4 模板,您几乎可以生成您想要的任何内容。
您可以通过以下链接了解更多信息:
I我非常确定所有这些链接都是您探索的良好开端。
如果您想在 Visual Studio 之外生成 T4 模板,可以使用自定义 MSBuild 任务来调用 T4 模板 (链接)
以下是“执行”代码的示例MSBuild 任务。 点击此处获取源代码:
The T4 templating that comes with Visual Studio 2008 natively or with Visual Studio 2005 SDK, you can pretty much generate anything you want.
You can have more info on the following links:
I'm pretty sure that all those links is a good start to your quest.
If you want to generate T4 templates outside of Visual Studio, there is custom MSBuild task to invoke a T4 template (link)
Here is a sample of the "Execute" code of the MSBuild task. Click here for the source code:
我不明白为什么不。 我在以前的工作中认识的一个人使用 ASP.NET 页面和中继器控件创建了一个数据库包装生成器来插入属性。 然后他将文档内容写入源文件。
如果您担心 ASP.NET 会发脾气,您可以创建一个非常有限的测试用例并亲自查看。 不应该花太多时间来测试一个理论并让您知道它是否满足您的需求。
I don't see why not. Someone I knew at a former job created a database wrapper generator using ASP.NET pages and the repeater control to insert properties. He then wrote out the document contents to a source file.
If you are worried about ASP.NET will throw a fit, you can just create a very limited test case and see for yourself. Shouldn't take much time to test a theory and let you know if it meets your needs.
这当然是可能的。 大多数服务器控件将被淘汰,因为它们会自动发出 HTML 标记。 但是,您可以对页面进行数据绑定并使用数据绑定表达式。 Visual Studio 无疑会抱怨无效标记。
然后,您必须通过 Cassini 或 ASP.NET 管道运行页面才能获取输出。 我在某个地方有一个单元测试工具可以做到这一点,而且非常简单。
不过,更好的想法可能是使用代码生成器。 像 CodeSmith 这样的东西应该可以很好地工作,甚至 Visual Studio 内置 T4 为您提供了很大的灵活性,同时又不会试图将您束缚在 HTML 中。
It's certainly possible. Most server controls will be out, as they'll automatically emit HTML markup. But, you can databind the page and use databinding expressions. Visual Studio will no doubt complain about invalid markup.
You then have to run your pages through Cassini or the ASP.NET pipeline to get the output. I've got a unit test harness somewhere that does that, and it's surprisingly easy.
A better idea, though, would probably be to use a code generator. Something like CodeSmith should work nicely, or even Visual Studio's built in T4 gives you a lot of flexibility while not trying to tie you into HTML.
对于代码生成,您应该查看 T4 模板功能。
它使用类似于 ASP.Net 的语法。
参见斯科特·汉塞尔曼斯的帖子:
http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
For code generation you should take a look into the T4 templating features.
It uses a syntax similar to ASP.Net.
See Scott Hanselmans Post:
http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
是的你可以。 只需创建一个标准的 .aspx 页面,删除所有 HTML 并在页面中放置您想要的任何内容。 然后你可以使用 <% %> 标签将动态内容放置在页面中。 正如 Jason Z 所说,您可以使用 Repeater 控件迭代项目集合以在“页面”中列出。 此外,您将无法使用所有其他服务器控件,因为它们会生成 HTML,但您仍然可以根据需要创建自己的服务器控件和/或用户控件。
Yes you can. Just create a standard .aspx page, delete all the HTML and place whatever content you want in the page. Then you can use <% %> tags to place dynamic content within the page. And like Jason Z said, you can use the Repeater control to iterate through collections of items to list out in the "page". Also, you wont be able to use all the other server controls since they generate HTML, but you can still create your own server control and/or user controls as necessary.