HTML генератор для .NET? - PullRequest
7 голосов
/ 19 мая 2009

Пользуясь Seaside последние несколько лет, я обнаружил, что системы шаблонов плохо пахнут кодом. Существует ли платформа для .net, использующая что-то похожее на систему Seaside canvas для генерации html, css и javascript? Или способ избежать дублирования, которое я обычно нахожу в шаблонах.

[Изменить] NHaml не подходит близко к тому, что я ищу. Дело не в сокращении (X) HTML, а в том, что у меня есть язык программирования, на котором я могу рефакторинг и повторное использование кода.

В Seaside это может выглядеть так: (canvas - это конструктор html [и javascript])

renderContentOn: canvas
    canvas form
        class: 'eventEditor';
        with:[
            self renderWhoOn: canvas;
                 renderButtonsOn: canvas]

В этом методе я вызываю две подпрограммы

renderWhoOn: canvas
self decorateDivAndLabel: 'Who' on: canvas around: [
    canvas select
        id: tagId;
        selected: model who;
        list: model whoList;
        callback: [:value | model who: value]]

Первый вызывает декоратор вокруг элемента формы select:

decorateDivAndLabel: aString on: canvas around: aBlock
canvas div: [
    canvas label
        for: (tagId := canvas nextId);
        with: aString,':'.
    aBlock value]

Это позволяет устранить практически все дублирования.

Ответы [ 3 ]

5 голосов
/ 23 мая 2009

У меня аналогичные чувства к системам шаблонов (см. ASP.MVC: Реализация механизма представления без шаблонов? ), и после небольших экспериментов я выбрал следующий подход:

  • Реализован свободный класс C # генератора HTML, который не записывает напрямую в поток, а вместо этого создает всю страницу HTML как иерархию объектов в памяти.
  • Высокоуровневые (повторно используемые) фрагменты HTML-кода (например, сложные элементы управления вводом и т. Д.) Реализованы в виде отдельных классов и вставляются как узлы в эту иерархию и могут автоматически расширяться в простые HTML-узлы.
  • В этом случае представления MVC - это классы POCO C #, которые создают иерархию HTML и записывают ее в поток ответов.

Некоторые из преимуществ (с моей точки зрения):

  • Вы по-прежнему сохраняете контроль над HTML
  • Повторное использование, наследование, инкапсуляция ...
  • Результат автоматически форматируется (отступы, XHTML и т. Д.)
  • И что самое приятное ... никаких шаблонных сценариев с использованием отдельного DSL.
3 голосов
/ 16 ноября 2010

Есть нечто связанное - SharpDOM - это внутренний DSL на основе C #. Вы можете использовать его как с ASP.NET MVC, так и вне его. Сейчас он поддерживает только генерацию HTML, в следующем выпуске также будет поддержка CSS.

1 голос
/ 19 мая 2009

Я не знаком с Seaside, но вы можете использовать много разных механизмов просмотра с ASP.NET MVC, например, NHaml . Возможно, вы сможете оценить их и посмотреть, подойдет ли вам кто-нибудь.

Вы также можете создать свой собственный движок просмотра .

...