Использование aspx Rendering Engine для генерации не HTML - PullRequest
9 голосов
/ 22 октября 2008

Можно ли использовать шаблонизатор asp (с частичным классом code-behind, динамическими блоками <% ...%> и т. Д.) Для генерации не HTML? Я хочу иметь чистый и понятный способ динамического создания кода. (В частности, я хочу сгенерировать код LaTeX, заполненный значениями из базы данных.)

В настоящее время мои шаблоны LaTeX представляют собой строки ресурсов с заполнителями, которые я помещаю в строку string.replace со значениями базы данных. Это решение быстро стало очень трудно поддерживать и чистить. Мне бы очень хотелось использовать динамические блоки из разметки aspx, но я не уверен, а) будет ли aspx подгонять подгонку, если вывод не является HTML, или б) как на самом деле отобразить результат в файл .tex .

Сам генерирующий код находится в C # .dll. Мы используем .NET 3.5

Возможно ли это? Заранее спасибо.

Ответы [ 5 ]

7 голосов
/ 22 октября 2008

Шаблоны T4, которые поставляются с Visual Studio 2008 изначально или с Visual Studio 2005 SDK, позволяют в значительной степени генерировать все, что вы захотите.

Вы можете получить дополнительную информацию по следующим ссылкам:

Я уверен, что все эти ссылки - хорошее начало вашего квеста.

Если вы хотите создавать шаблоны T4 вне Visual Studio, существует специальная задача MSBuild для вызова шаблона T4 ( ссылка )

Вот пример кода «Выполнить» задачи MSBuild. Нажмите здесь для получения исходного кода :

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;
}
0 голосов
/ 22 октября 2008

Да, вы можете. Просто создайте стандартную страницу .aspx, удалите весь HTML-код и разместите любой контент на странице. Затем вы можете использовать теги <%%> для размещения динамического содержимого на странице. И, как сказал Джейсон З., вы можете использовать элемент управления Repeater для перебора коллекций элементов, перечисляемых на «странице». Кроме того, вы не сможете использовать все остальные серверные элементы управления, поскольку они генерируют HTML, но вы по-прежнему можете создавать свой собственный серверный элемент управления и / или пользовательские элементы управления по мере необходимости.

0 голосов
/ 22 октября 2008

Это, конечно, возможно. Большинство серверных элементов управления будут отключены, поскольку они будут автоматически генерировать HTML-разметку. Но вы можете привязать данные на странице и использовать выражения привязки данных. Visual Studio, несомненно, будет жаловаться на неверную разметку.

Затем вы должны запустить свои страницы через Cassini или конвейер ASP.NET, чтобы получить вывод. У меня где-то есть проводка для модульных испытаний, и это удивительно просто.

A лучше идея, однако, вероятно, будет использовать генератор кода. Что-то вроде CodeSmith должно работать хорошо, или даже встроенная в Visual Studio T4 дает вам большую гибкость, не пытаясь привязать вас к HTML.

0 голосов
/ 22 октября 2008

Для генерации кода вы должны взглянуть на функции шаблонов T4. Он использует синтаксис, похожий на ASP.Net.

См. Сообщение Скотта Хансельманса: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

0 голосов
/ 22 октября 2008

Не понимаю, почему нет. Кто-то, кого я знал на предыдущем задании, создал генератор обертки базы данных, используя страницы ASP.NET и элемент управления повторителем для вставки свойств. Затем он записал содержимое документа в исходный файл.

Если вы беспокоитесь о том, что ASP.NET подойдет, вы можете просто создать очень ограниченный контрольный пример и убедиться в этом сами. Не нужно много времени, чтобы проверить теорию и сообщить, соответствует ли она вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...