Это интересная идея, доведенная до крайности, я бы сказал. В моем магазине мы используем HTML-соглашения почти для всего, кроме нашего макета. Единственный реальный HTML, который мы имеем в проекте, это наша главная страница Spark. Для создания самого контента мы используем условный механизм, который выделяет семантическую модель HTML. (Мы используем библиотеку HtmlTags из FubuMVC для построения семантической модели.)
Пример соглашения для отрисовки многострочного текстового поля выглядит следующим образом:
public static HtmlTag Build(ElementRequest req)
{
return Tags.TextArea
.Rows(6)
.Id(req.ElementId)
.Attr("name", req.ElementId)
.Text(req.StringValue());
}
Эти соглашения запускаются при отражении в модели представления (или мы можем вызвать их вручную из вспомогательного метода). Вывод выводится (через ToString ()) в раздел содержимого нашей главной страницы. Мы шутим, что довольно скоро нам даже не понадобится движок просмотра.
ps вот как мы справляемся с вложением. (Ваши блоки использования выглядят загроможденными!)
return Tags.Div.Nest(
Tags.Button("save").AddClass("positive"),
Tags.Span.Text(" or "),
Tags.Anchor.Text("cancel").AddClass("negative")
);
Nest () - это метод расширения, который просто принимает массив params из HtmlTag и добавляет их в дочернюю коллекцию родителя.