【问题标题】:Using aspx Rendering Engine to Generate Non-HTML使用 aspx 渲染引擎生成非 HTML
【发布时间】:2010-09-18 15:13:01
【问题描述】:

是否可以使用 asp 模板引擎(带有部分代码隐藏类、动态 块等)来生成非 HTML?我想要一种干净且可维护的方式来动态生成代码。 (具体来说,我想生成填充数据库中的值的 LaTeX 代码。)

目前我的 LaTeX 模板是带有占位符的资源字符串,我将这些字符串替换为数据库值。这种解决方案很快变得非常难以维护和清洁。我真的很想使用 aspx 标记中的动态块,但我不确定 a) 当输出不是 HTML 时,aspx 是否会合适,或者 b) 如何将结果实际呈现到 .tex 文件中.

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

这可能吗?提前致谢。

【问题讨论】:

    标签: .net asp.net asp.net-mvc templates latex


    【解决方案1】:

    Visual Studio 2008 自带的 T4 模板或 Visual Studio 2005 SDK 自带的 T4 模板,你几乎可以生成任何你想要的东西。

    您可以通过以下链接获得更多信息:

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

    如果您想在 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;
    }
    

    【讨论】:

    • 据我了解,T4 用于设计时生成。我需要在运行时生成乳胶,有点像 asp。如果 T4 可以在运行时调用,它看起来是正确的工具,但我不确定它是否可以。
    • 刚刚对其进行了编辑,并为您找到了一个从 MSBuild 而不是 Visual Studio 生成它的链接。
    • T4 是 Visual Studio 的一部分,因此您不能将它与您的应用一起分发以在运行时使用。
    【解决方案2】:

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

    如果您担心 ASP.NET 会失败,您可以创建一个非常有限的测试用例并亲自查看。不需要花费太多时间来检验一个理论并让您知道它是否满足您的需求。

    【讨论】:

      【解决方案3】:

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

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

      一个更好的想法可能是使用代码生成器。像 CodeSmith 这样的东西应该可以很好地工作,甚至 Visual Studio 的内置 T4 也为您提供了很大的灵活性,而不是试图将您束缚在 HTML 中。

      【讨论】:

      • 但是T4模板可以在运行时渲染吗?
      【解决方案4】:

      对于代码生成,您应该了解一下 T4 模板功能。 它使用类似于 ASP.Net 的语法。

      参见 Scott Hanselmans 的帖子: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-06-08
          • 2014-10-23
          • 2011-04-18
          • 1970-01-01
          • 1970-01-01
          • 2011-02-04
          • 2010-10-24
          • 2011-05-05
          • 1970-01-01
          相关资源
          最近更新 更多