ASP.NET, XSLT и динамические элементы управления

#asp.net #xml #xslt

Вопрос:

Я хочу использовать xml и xsl для создания элементов управления на asp.net страница.

В настоящее время у меня есть asp.net страница содержимого, содержащая элемент управления xml. Когда страница загружена, загружается xml-файл, извлекается необходимый элемент и устанавливается в качестве элемента управления xml DocumentContent, а для элемента управления xml TransformSource устанавливается соответствующий файл xsl.

В файле xsl я хочу использовать шаблоны для создания asp.net элементы управления в зависимости от содержимого xml. Есть ли простой способ сделать это с помощью элемента управления xml на странице содержимого?

Ответ №1:

Зарегистрируйте пространство имен в своем XSL, чтобы вы могли поместить .СЕТЕВЫЕ теги на стороне сервера в него. Запустите преобразование XSL в соответствии с вашим XML. Запустите результат преобразования на странице.ПарсеКонтроли(). Это даст вам хорошую иерархию управления. Добавьте выходные данные этой функции в свою коллекцию элементов управления (или коллекцию элементов управления вашего заполнителя), и все готово.

Существует МНОЖЕСТВО предостережений при использовании динамических элементов управления в .NET, так что будьте осторожны.

Ответ №2:

Сгенерированный вывод преобразования не анализируется для добавления на страницу в качестве набора элементов управления. Скорее сгенерированный вывод отправляется в ответ. Поэтому вы не можете применить преобразование к элементу управления XML, которое создаст новые элементы управления.

Возможно, есть способ создать результат преобразования и вызвать некоторый синтаксический анализ, который можно применить к странице, но который не будет соответствовать вашим «простым» требованиям.

Ответ №3:

Я не знаю ни одного простого способа сделать это, но есть несколько систем, которые генерируют разметку aspnet на лету, а затем отправляют ее во время выполнения aspnet из потока памяти (или аналогичного).

Я думаю, что umbraco использует систему, подобную этой, но первоначальный механизм построения, вероятно, немного более низкого уровня, чем элемент управления aspnet. Это может быть достижимо с помощью httpmodule или чего-то еще, что попадает ранее в конвейер запросов.