【问题标题】:How do I get the current ASP.NET theme from HttpContext.Current?如何从 HttpContext.Current 获取当前的 ASP.NET 主题?
【发布时间】:2012-02-21 04:43:21
【问题描述】:

我正在使用 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 cmets 之间的所有内容,这实际上只是我的 UserControl 的 HTML。

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

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

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

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

【问题讨论】:

  • 在 Session 状态下存储 Theme 怎么样?

标签: asp.net ajax themes


【解决方案1】:
(System.Web.HttpContext.Current.Handler as System.Web.UI.Page).Theme;

或者 假设您通过在 Pages 部分中指定默认主题来使用它

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

//use the them  via  pages.Theme

【讨论】:

  • 我已经想到了这一点。但是,由于我是在通用 HTTP 处理程序中执行语句,因此不能将其转换为类型页面。还有其他想法吗?
  • 您的第二个想法也是一个方便的代码。但是,这意味着如果我将来更改主题的应用方式,则必须更改此处理程序。现在有一些条件逻辑根据存储在用户配置文件中的变量将它们应用到基本页面中。我想我现在只是从客户那里传递它。这样以后的更新就不会破坏它。
  • 很好处理代码不必更改,因为此代码是从 web.config 中获取主题的。如果您希望主题基于用户,您可以使用会话或从用户的个人资料中检索它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2021-06-05
  • 2016-12-26
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多