Как мне получить текущую тему ASP.NET из HttpContext.Current? - PullRequest
1 голос
/ 28 января 2012

Я использую 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?

1 Ответ

4 голосов
/ 28 января 2012
(System.Web.HttpContext.Current.Handler as System.Web.UI.Page).Theme;

Или Предполагая, что вы используете тему по умолчанию, указав ее в разделе Страницы

PagesSection pages = (PagesSection)WebConfigurationManager.GetSection("system.web/pages");

//use the them  via  pages.Theme
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...