代码之家  ›  专栏  ›  技术社区  ›  Wyatt

使用ASPX呈现引擎生成非HTML

  •  9
  • Wyatt  · 技术社区  · 16 年前

    是否可以使用ASP模板引擎(带有部分代码隐藏类,动态<%……%>块等)生成非HTML?我希望有一种干净和可维护的方式来动态生成代码。(具体来说,我希望生成用数据库中的值填充的乳胶代码。)

    当前,我的LaTex模板是带有占位符的资源字符串,我将其字符串替换为数据库值。这种溶液很快变得很难维护和清洁。我真的很想使用来自ASPX标记的动态块,但我不确定a)当输出不是HTML时ASPX是否会抛出fit,或b)如何将结果实际呈现为.tex文件。

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

    这有可能吗?事先谢谢。

    5 回复  |  直到 16 年前
        1
  •  7
  •   Maxime Rouiller    16 年前

    T4模板是与Visual Studio 2008本机或Visual Studio 2005 SDK一起提供的,您几乎可以生成所需的任何内容。

    您可以在以下链接中获得更多信息:

    我很确定所有这些链接都是你探索的良好开端。

    如果要在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;
    }
    
        2
  •  0
  •   Jason Z    16 年前

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

    如果您担心ASP.NET会抛出一个合适的,您可以创建一个非常有限的测试用例并亲自查看。不应该花太多时间来测试一个理论,让你知道它是否满足你的需要。

        3
  •  0
  •   Mark Brackett    16 年前

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

    然后,您必须通过cassini或ASP.NET管道运行页面才能获得输出。我在某个地方有一个单元测试工具可以做到这一点,而且非常容易。

    更好的 不过,想法可能是使用代码生成器。像codesmith这样的工具应该很好地工作,甚至是Visual Studio内置的 T4 在不尝试将您绑定到HTML的同时,给您很大的灵活性。

        4
  •  0
  •   Brian Schmitt    16 年前

    对于代码生成,您应该了解t4模板化功能。 它使用类似于ASP.NET的语法。

    见Scott Hanselmans邮报: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

        5
  •  0
  •   Chris Pietschmann    16 年前

    是的,你可以。只需创建一个标准的.aspx页面,删除所有HTML并将您想要的任何内容放在页面中。然后,您可以使用<%%>标记在页面中放置动态内容。正如JasonZ所说,您可以使用Repeater控件迭代要在“页面”中列出的项目集合。此外,由于其他服务器控件生成HTML,您将无法使用它们,但您仍然可以根据需要创建自己的服务器控件和/或用户控件。