Frage

Ist es möglich, die asp Template-Engine (mit dem Teil Code-Behind-Klasse, dynamisch <% ...%> Blöcken und so weiter) zu verwenden, nicht HTML zu generieren? Ich möchte einen sauberen und wartbar Weg, um Code dynamisch zu generieren. (Insbesondere mag ich LaTeX-Code mit Werten aus einer Datenbank gefüllt generieren.)

Zur Zeit meiner LaTeX-Vorlagen sind Ressourcen-Strings mit Platzhalter, die ich mit den Datenbankwerten String.Replace. Diese Lösung wurde schnell sehr schwierig zu warten und zu reinigen. Ich mag wirklich die dynamischen Blöcke von aspx Markup verwenden, aber ich bin mir nicht sicher, ob a) aspx einen Anfall werfen, wenn der Ausgang nicht HTML ist, oder b), wie man tatsächlich das Ergebnis in eine .tex-Datei übertragen .

Der Erzeugungscode selbst ist in einem C # DLL befindet. Wir verwenden .NET 3.5

Ist das möglich? Danke im Voraus.

War es hilfreich?

Lösung

Der T4 Templating, die mit Visual Studio 2008 nativ oder mit Visual Studio 2005 SDK kommt, können Sie so ziemlich alles, erzeugen Sie wollen.

Sie können auf die folgenden Links, um mehr Informationen haben:

Ich bin mir ziemlich sicher, dass alle diese Links zu Ihrer Suche ist ein guter Anfang.

Wenn Sie T4-Vorlagen außerhalb von Visual Studio erstellt werden soll, gibt es benutzerdefinierte MSBuild Aufgabe, eine T4-Vorlage aufzurufen ( link )

Hier ist ein Beispiel für den Code der MSBuild-Aufgabe „Ausführen“. hier für den Quellcode klicken :

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

Andere Tipps

Ich sehe nicht, warum nicht. Jemand, den ich in einem früheren Job kannte erstellt eine Datenbank-Wrapper-Generator mit ASP.NET-Seiten und die Repeater-Steuerelement Eigenschaften einzufügen. Er schrieb dann den Inhalt des Dokuments zu einer Quelldatei.

Wenn Sie sind besorgt über ASP.NET wird einen Anfall werfen, können Sie nur einen sehr begrenzten Testfall erstellen und für sich selbst sehen. Sollte nicht viel Zeit in Anspruch nehmen, eine Theorie zu testen, und lassen Sie wissen, ob es Ihren Bedürfnissen entspricht.

Es ist sicherlich möglich. Die meisten Server-Steuerelemente werden geführt werden, da sie automatisch HTML-Markup emittieren werden. Aber, können Sie die Seite Databind und Datenbindung Ausdrücke verwenden. Visual Studio wird ohne Zweifel bemängelt ungültigen Markup.

Sie müssen dann Ihre Seiten durch Cassini oder die ASP.NET-Pipeline ausführen, um die Ausgabe zu erhalten. Ich habe eine Einheit Test-Harnisch irgendwo bekam, die das tut, und es ist überraschend einfach.

A besser Idee, würde aber wahrscheinlich einen Code-Generator zu verwenden. So etwas wie Codesmith sollte gut funktionieren, oder auch Visual Studio gebaut in T4 viel Flexibilität gibt, die zwar nicht versuchen, Sie in HTML zu binden.

Für die Codegenerierung sollten Sie einen Blick in die T4 Templating Features nehmen. Es verwendet eine Syntax ähnlich wie ASP.Net.

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

Ja, Sie können. Erstellen Sie einfach eine Standard-ASPX-Seite, löschen Sie alle HTML und Stelle, was Inhalte, die Sie auf der Seite möchten. Dann können Sie <%%> -Tags dynamische Inhalte innerhalb der Seite zu platzieren. Und wie Jason Z sagte, können Sie das Repeater-Steuerelement verwenden, um durch Sammlungen von Elementen zu durchlaufen in der „Seite“ zur Liste aus. Auch Sie nicht in der Lage sein, alle anderen Server-Steuerelemente zu verwenden, da sie HTML generieren, aber Sie können noch Ihre eigene Server-Steuerung und / oder Bedienelemente wie nötig erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top