9 Stimmen

Verwendung der aspx-Rendering-Engine zur Erzeugung von Nicht-HTML

Ist es möglich, die Asp-Templating-Engine (mit der partiellen Code-Behind-Klasse, dynamische <% ... %> Blöcke und so) zu verwenden, um nicht HTML zu generieren? Ich möchte einen sauberen und wartbaren Weg, um Code dynamisch zu generieren haben. (Insbesondere möchte ich LaTeX-Code mit Werten aus einer Datenbank befüllt zu generieren.)

Derzeit bestehen meine LaTeX-Vorlagen aus Ressource-Strings mit Platzhaltern, die ich durch die Datenbankwerte ersetze (string.replace). Diese Lösung wurde schnell sehr schwierig zu pflegen und zu reinigen. Ich würde wirklich gerne die dynamischen Blöcke von aspx Markup verwenden, aber ich bin nicht sicher, a) ob aspx einen Anfall werfen wird, wenn die Ausgabe nicht HTML ist, oder b) wie man tatsächlich das Ergebnis in eine .tex-Datei rendern.

Der generierende Code selbst befindet sich in einer C# .dll. Wir verwenden .NET 3.5

Ist dies möglich? Vielen Dank im Voraus.

7voto

Maxime Rouiller Punkte 13433

Mit dem T4-Templating, das mit Visual Studio 2008 nativ oder mit Visual Studio 2005 SDK geliefert wird, können Sie so ziemlich alles generieren, was Sie wollen.

Weitere Informationen erhalten Sie unter den folgenden Links:

Ich bin ziemlich sicher, dass all diese Links ein guter Anfang für Ihre Suche sind.

Wenn Sie T4-Vorlagen außerhalb von Visual Studio generieren möchten, gibt es eine benutzerdefinierte MSBuild-Aufgabe zum Aufrufen einer T4-Vorlage ( Link )

Hier ist ein Beispiel für den "Execute"-Code der MSBuild-Aufgabe. Klicken Sie hier für den Quellcode :

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

0voto

Jason Z Punkte 12679

Ich wüsste nicht, warum nicht. Jemand, den ich von einer früheren Arbeitsstelle kannte, erstellte einen Datenbank-Wrapper-Generator mit ASP.NET-Seiten und dem Repeater-Steuerelement zum Einfügen von Eigenschaften. Er hat dann den Inhalt des Dokuments in eine Quelldatei geschrieben.

Wenn Sie sich Sorgen machen, dass ASP.NET einen Anfall bekommt, können Sie einfach einen sehr begrenzten Testfall erstellen und sich selbst davon überzeugen. Es sollte nicht viel Zeit in Anspruch nehmen, eine Theorie zu testen und Sie wissen zu lassen, ob sie Ihren Anforderungen entspricht.

0voto

Mark Brackett Punkte 83046

Das ist durchaus möglich. Die meisten Server-Steuerelemente werden nicht funktionieren, da sie automatisch HTML-Markup ausgeben werden. Aber Sie können die Seite mit Daten binden und Datenbindungsausdrücke verwenden. Visual Studio wird sich zweifellos über ungültiges Markup beschweren.

Sie müssen dann Ihre Seiten durch Cassini oder die ASP.NET-Pipeline laufen lassen, um die Ausgabe zu erhalten. Ich habe irgendwo ein Unit-Test-Harness, das das tut, und es ist überraschend einfach.

A besser Die beste Idee wäre jedoch wahrscheinlich, einen Codegenerator zu verwenden. Etwas wie CodeSmith sollte gut funktionieren, oder sogar Visual Studio's in gebaut T4 bietet Ihnen eine große Flexibilität, ohne Sie an HTML zu binden.

0voto

Brian Schmitt Punkte 5868

Für die Codegenerierung sollten Sie einen Blick auf die T4-Templating-Funktionen werfen. Es verwendet eine ähnliche Syntax wie ASP.Net.

Siehe Scott Hanselmans Beitrag: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

0voto

Chris Pietschmann Punkte 28906

Ja, das können Sie. Erstellen Sie einfach eine Standard-.aspx-Seite, löschen Sie den gesamten HTML-Code und platzieren Sie den gewünschten Inhalt auf der Seite. Dann können Sie <% %>-Tags verwenden, um dynamische Inhalte auf der Seite zu platzieren. Und wie Jason Z sagte, können Sie das Repeater-Steuerelement verwenden, um durch Sammlungen von Elementen zu iterieren, die auf der "Seite" aufgelistet werden sollen. Außerdem können Sie nicht alle anderen Server-Steuerelemente verwenden, da sie HTML generieren, aber Sie können immer noch Ihre eigenen Server-Steuerelemente und/oder Benutzer-Steuerelemente nach Bedarf erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X