Я использую AJAX для загрузки пользовательского элемента управления со стороны сервера в обработчике HTTP. Для этого я создаю новый объект страницы и выполнения на стороне сервера управления пользователя генерировать необработанный HTML, например, так:Как получить текущую тему ASP.NET из HttpContext.Current?
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() просто функция, которая возвращает все между 2 жестко закодированы HTML комментарии, которые фактически являются только HTML моего UserControl.
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые из этих элементов управления сервером требуют поддержки темы ASP.NET. Я нашел способ сделать это, добавив следующие строки после объявления страницы:
page.Theme = "Theme3"
page.Controls.Add(New System.Web.UI.HtmlControls.HtmlHead())
Это работает как шарм, когда жестко закодировано с именем темы. Однако я хотел бы получить название темы из текущего контекста. Все примеры, которые я видел в Интернете, требуют, чтобы у вас был объект страницы, чтобы получить название темы. Но я начинаю с новой страницы, в которой нет темы.
Итак, мой вопрос заключается в том, есть ли способ загрузить название темы из HttpContext или это единственный способ загрузить это на серверной стороне, передав имя темы клиенту через AJAX?
, что о сохранении темы в состоянии сессии? – Mikhail