2009-10-26 3 views
0

Я прочитал связанные вопросы, но не могу найти тот, который подходит для моей проблемы (или я просто глуп).Как динамически компилировать ViewUserControl (Asp.Net MVC) или Asp.Net Control

В основном у меня есть фабрика, которая отображает определенный «шаблон», и этот шаблон содержит определенные «сущности». Эти объекты могут отображать себя и иметь метод Void Render, который создает HTML-код и возвращает его на фабрику шаблонов.

Теперь для ремонтопригодности это кошмар. Если клиент хочет пространство между html, dlls нужно будет перекомпилировать (что ужасно!)

Мне нужен способ переместить логику + HTML из метода Void Render и в какой-то контроль, проанализировать элемент управления и вернуть HTML во время выполнения. Так что код может быть относительно хорошо поддержан.

Я использую Asp.Net MVC, а фабрика шаблонов - это библиотека классов. Есть ли способ сделать это?

Спасибо!

ответ

1

Похоже, что вы хотите, это строго типизированный ViewUserControl для каждой «сущности». Это в основном то, как я реализовал виджеты в проекте, над которым я работаю. У каждого виджета есть собственная модель виджета и частичный вид (ViewUserControl), строго типизированный для этой модели. Виджет использует свойства модели для визуализации этого виджета.

+0

Это именно то, что я хочу достичь! Благодаря! Теперь остается вопрос, как я это делаю. Необходимо, чтобы фабрика тогда просто вернула список управляющих имен + созданных экземпляром моделей, а представление просто пропустило каждый элемент и отобразило их - Html.RenderPartial («EntityName», EntityModel)? –

+1

Это в основном, как я это делаю, хотя я помещаю все модели в перечислимую внутри модели страницы и имею метод на моем базовом контроллере, который использует фабрику для создания всех виджетов для этой страницы и помещает их в эту основную модель , На странице я просто перебираю перечислимое число и вызываю RenderPartial с идеей модели виджета, частичную для рендеринга: foreach (виджет var в Model.Widgets) {Html.RenderPartial (widget.ViewName, widget.Model); } – tvanfosson

+0

Большое спасибо! Я буду реализовывать это! –

Смежные вопросы