Вопрос

Я собираюсь реализовать некоторые шаблоны в веб-приложении и хочу использовать шаблонные элементы управления ASP.NET.Однако я не хочу полагаться на физические файлы .ascx или VirtualPathProvider для загрузки шаблонов.

Я хочу иметь возможность загружать шаблоны из базы данных или другого хранилища данных (в памяти?). Существует ли какая-либо реализация метода LoadTemplate (), который возвращает ITemplate с учетом строкового представления шаблона .ascx?

Если нет, как бы мне написать его?

К вашему сведению, у Kentico есть аналогичная функция, но они полагаются на код VirtualPathProvider, чтобы использовать код LoadTemplate() в классе TemplateControl.С помощью этого метода они могут загружать шаблоны (они называют их преобразованиями), хранящиеся в базе данных.

Это было полезно?

Решение

Да, вероятно, вы захотите использовать метод VirtualPathProvider, если источником, который вы хотите использовать, является строка или база данных.(Существуют также генераторы кода, которые могут генерировать код, но обычно они используются при динамическом построении кода, а не при загрузке из внешнего источника, как в вашем случае.)

Вы не упоминаете, почему не хотите использовать VirtualPathProvider.Это связано с нежеланием или невозможностью из-за каких-то особых требований в конкретной ситуации?

Наконец, если "кажется тривиальным" загружать и компилировать код динамически, тогда вы не знаете, что должна делать вся система .Net, прежде чем она сможет запускать динамический код - генерация сборки, компиляция и JIT, приложениеконтексты, разрешение имен классов / членов, безопасность кода и т. д. Возможно, вы просто избалованы тем, насколько легко .Net упростила выполнение других сложных задач.;-)

Другие советы

Я столкнулся с аналогичной проблемой.Однако VirtualPathProvider просто слишком сложен для реализации для такого небольшого выигрыша - не говоря уже о том, что его реализация может быть немного рискованной с точки зрения безопасности.Я нашел два возможных решения:

1) Используйте отражение, чтобы получить то, что вы хотите:

родовое слово

2) Используйте несколько хитроумный обходной путь:

родовое слово

Я открыто админку, что ни то ни другое не является отличным решением.В идеале в .Net Framework должен быть метод для такого рода вещей.Что-то вроде:

родовое слово

Это избавило бы от необходимости внедрять VirtualPathProvider.Может, мы увидим это в ASP.NET vNext :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top