Domanda

È possibile utilizzare il motore di template ASP (con la classe code-behind parziale, dinamico <% ...% > blocchi e simili) per generare non HTML? Voglio avere un modo pulito e gestibile per generare codice in modo dinamico. (In particolare, voglio generare il codice LaTeX popolato con valori da un database.)

Attualmente i miei modelli LaTeX sono stringhe di risorse con segnaposto che string.replace con i valori del database. Questa soluzione divenne rapidamente molto difficile da mantenere e pulire. Mi piacerebbe davvero usare i blocchi dinamici dal markup aspx, ma non sono sicuro a) se aspx farà un adattamento quando l'output non è HTML, oppure b) come rendere effettivamente il risultato in un file .tex .

Il codice di generazione stesso si trova in un C # .dll. Stiamo usando .NET 3.5

È possibile? Grazie in anticipo.

È stato utile?

Soluzione

Il modello T4 fornito con Visual Studio 2008 in modo nativo o con Visual Studio 2005 SDK, puoi praticamente generare tutto ciò che desideri.

Puoi avere maggiori informazioni sui seguenti link:

Sono abbastanza sicuro che tutti quei link siano un buon inizio per la tua ricerca.

Se si desidera generare modelli T4 al di fuori di Visual Studio, esiste un'attività MSBuild personalizzata per invocare un modello T4 ( link )

Ecco un esempio di " Esegui " codice dell'attività MSBuild. Fai clic qui per il codice sorgente :

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

Altri suggerimenti

Non vedo perché no. Qualcuno che conoscevo in un precedente lavoro ha creato un generatore di wrapper di database usando pagine ASP.NET e il controllo ripetitore per inserire proprietà. Ha quindi scritto il contenuto del documento in un file sorgente.

Se sei preoccupato che ASP.NET si adatti, puoi semplicemente creare un caso di test molto limitato e vedere di persona. Non dovresti impiegare molto tempo per testare una teoria e farti sapere se soddisfa le tue esigenze.

È certamente possibile. La maggior parte dei controlli del server verrà disattivata poiché emettono automaticamente markup HTML. Tuttavia, è possibile eseguire il databind della pagina e utilizzare espressioni di databinding. Visual Studio si lamenterà senza dubbio di markup non valido.

Devi quindi eseguire le tue pagine attraverso Cassini o la pipeline ASP.NET per ottenere l'output. Ho un cablaggio di test unitario da qualche parte che lo fa, ed è sorprendentemente facile.

Un'idea migliore , tuttavia, sarebbe probabilmente quella di utilizzare un generatore di codice. Qualcosa come CodeSmith dovrebbe funzionare bene, o anche Visual Studio integrato T4 ti dà molta flessibilità mentre non cerchi di legarti in HTML.

Per la generazione del codice dovresti dare un'occhiata alle funzionalità di template T4. Utilizza una sintassi simile a ASP.Net.

Vedi Scott Hanselmans Post: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkxCretG >

Sì, puoi. Basta creare una pagina aspx standard, eliminare tutto l'HTML e posizionare il contenuto desiderato nella pagina. Quindi puoi usare & Lt;%% & Gt; tag per posizionare contenuti dinamici all'interno della pagina. E come ha detto Jason Z, puoi usare il controllo Repeater per scorrere le raccolte di elementi da elencare nella & Quot; pagina & Quot ;. Inoltre, non sarai in grado di utilizzare tutti gli altri controlli server poiché generano HTML, ma puoi comunque creare il tuo controllo server e / o controlli utente, se necessario.

scroll top