Я использую AJAX для загрузки пользовательского элемента управления со стороны сервера в обработчике HTTP.Для этого я создаю новый объект страницы и выполняю серверную часть управления пользователями для генерации необработанного HTML, например так:
Dim page As New Page()
Dim frm As New HtmlForm
Dim commentTag As String = "CaptureText"
Dim viewControl As UserControl = CType(page.LoadControl(VirtualPathUtility.ToAbsolute(String.Format("~/Help/{0}.ascx",Topic))), UserControl)
page.Controls.Add(frm)
frm.Controls.Add(New LiteralControl(String.Format("<!-- {0} -->", commentTag)))
frm.Controls.Add(viewControl)
frm.Controls.Add(New LiteralControl(String.Format("<!-- /{0} -->", commentTag)))
Dim writer As New StringWriter()
context.Server.Execute(page, writer, False)
context.Response.ContentType = "text/html"
context.Response.Write(GetContents(writer.ToString, commentTag))
GetContents () - это просто функция, которая возвращает все между двумя жесткимизакодированные комментарии HTML, которые фактически являются только HTML-кодом моего UserControl.
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые из этих серверных элементов управления требуют поддержки тем ASP.NET.Я нашел способ сделать это, добавив следующие строки после объявления страницы:
page.Theme = "Theme3"
page.Controls.Add(New System.Web.UI.HtmlControls.HtmlHead())
Это работает как талисман, когда жестко запрограммирован с названием темы.Тем не менее, я хотел бы получить название темы из текущего контекста.Все примеры, которые я видел в Интернете, требуют, чтобы у вас был объект страницы, чтобы получить название темы.Но я начинаю с новой страницы без темы.
Итак, мой вопрос: есть ли способ загрузить имя темы откуда-то из HttpContext или это единственный способ загрузить это на стороне сервера, передав имя темы от клиента через AJAX?