如何从HttpContext.Current获取当前的ASP.NET主题?

时间:2012-01-28 14:43:18

标签: asp.net ajax themes

我正在使用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()只是一个函数,它返回2个硬编码HTML注释之间的所有内容,实际上只是我的UserControl的HTML。

我遇到的问题是其中一些服务器控件需要ASP.NET主题支持。我通过在页面声明后添加以下行找到了一种方法:

   page.Theme = "Theme3"
   page.Controls.Add(New System.Web.UI.HtmlControls.HtmlHead())

当使用主题名称进行硬编码时,这就像一个魅力。但是,我想从当前上下文中获取主题名称。我在网上看到的所有示例都要求您拥有一个页面对象以获取主题的名称。但我开始时没有主题的新页面。

所以我的问题是,是否有办法从HttpContext中的某处加载主题名称,或者是通过AJAX从客户端传递主题名称来加载服务器端的唯一方法?

1 个答案:

答案 0 :(得分:4)

(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