2008-10-22 21 views
9

是否有可能使用ASP模板引擎(含部分代码隐藏类,动态<%...%>块,这样的)产生非HTML?我想要一个干净而可维护的方式来动态生成代码。 (具体而言,我想要生成填充了从数据库中值LaTeX的代码。)使用ASPX渲染引擎来生成非HTML

目前我的LaTeX模板是与我同数据库值的占位符与string.replace资源字符串。这个解决方案很快就变得很难维护和清洁。我真的很喜欢使用aspx标记中的动态块,但我不确定a)当输出不是HTML时,aspx是否会抛出适当的值,或者b)如何实际将结果呈现为.tex文件。

生成代码本身位于C#.dll中。我们使用.NET 3.5

这可能吗?提前致谢。

回答

7

随Visual Studio 2008的本机或与Visual Studio 2005 SDK中的T4模板,你几乎可以生成你想要的任何东西。

你可以有以下链接的详细信息:

我很确定所有这些链接对y而言都是一个好的开始我们的追求。

如果你想生成的Visual Studio之外T4模板,还有自定义MSBuild任务调用T4模板(link

这里的MSBuild任务的“执行”的代码示例。 Click here for the source code

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; 
} 
+0

从我的理解来看,T4是设计时代的产物。我需要在运行时生成乳胶,类似于asp。如果T4可以在运行时调用,它看起来像是正确的工具,但我不确定它可以。 – Wyatt 2008-10-22 19:33:25

0

我不明白为什么不。我在前一份工作中认识的人使用ASP.NET页面创建了一个数据库包装生成器,并使用中继器控件来插入属性。然后他将文档内容写入源文件。

如果你担心ASP.NET会大发脾气,你可以创建一个非常有限的测试案例,看看自己。不应该花很多时间来测试一个理论,并让你知道它是否符合你的需求。

0

这当然有可能。大多数服务器控件都会自动发出HTML标记。但是,您可以数据绑定页面并使用数据绑定表达式。 Visual Studio无疑会抱怨无效的标记。

然后,您必须通过运行卡西尼或ASP.NET管道您的网页获取输出。我有一个单元测试工具可以做到这一点,而且这非常简单。

A 更好想法,但可能会使用代码生成器。像CodeSmith之类的应该可以很好地工作,甚至可以使用内置于T4中的Visual Studio为您提供很大的灵活性,同时不会试图将您绑定到HTML。

+0

但是T4模板可以在运行时渲染吗? – Wyatt 2008-10-22 19:35:19

0

当然可以。只需创建一个标准的.aspx页面,删除所有的HTML并在页面中放置任何您想要的内容。然后,您可以使用< %%>标签在页面中放置动态内容。就像Jason Z所说的那样,你可以使用Repeater控制器遍历项目集合以列出“页面”。此外,由于它们会生成HTML,因此您无法使用所有其他服务器控件,但您仍然可以根据需要创建自己的服务器控件和/或用户控件。