【问题标题】:Get current System.Web.UI.Page from HttpContext?从 HttpContext 获取当前 System.Web.UI.Page?
【发布时间】:2010-09-08 15:47:15
【问题描述】:

这实际上是一个两部分的问题。一、HttpContext.Current是否对应当前的System.UI.Page对象?

而第二个问题,大概和第一个有关,就是为什么我不能用下面的来看看当前页面是否实现了接口:

private IWebBase FindWebBase()
{
    if (HttpContext.Current as IWebBase != null)
    {
        return (IWebBase)HttpContext.Current.;
    }
    throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}

一般情况是,某些控件需要知道它们是作为 SharePoint Webpart 执行,还是作为 Asp.Net 框架的一部分执行。

我已经通过要求控件传递对自身的引用并检查控件的 Page 属性来解决问题,但我仍然很好奇为什么上述方法不起作用。

编译器错误是: 无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将 System.Web.HttpContext 转换为 ...IWebBase。

【问题讨论】:

    标签: c# asp.net httpcontext


    【解决方案1】:

    请看我的回答:
    Why HttpContext.Current.Handler is null?

    也许解决了您的问题。

    【讨论】:

    • 我在工作中使用相同的代码,但我很生气,因为我不知道工作细节的细节。所以为我的工作开发了这个代码。我以为把代码放在这里是为了帮助有我问题的朋友。感谢约翰桑德斯。
    【解决方案2】:

    您正在寻找HttpContext.Handler。由于 Page 实现了 IHttpHandler,您将获得对当前正在执行的页面的引用。您必须对其进行转换,或者至少尝试将其转换为您正在寻找的特定类型。

    HttpContext.Current 只返回 HttpContext 的单例实例。因此,它不是也永远不可能是一页。

    【讨论】:

    • 只是给任何阅读本文的人的便条。下面的答案是相同的,但有一个例子(即你使用 HttpContext.Current.Handler)。
    【解决方案3】:

    如果您想要当前正在执行的精确页面,您可能需要使用HttpContext.Current.CurrentHandler。例如,发送了对 Default.aspx 的请求,但会引发错误,并且您对自定义 ErrorHandler.aspx 页面执行Response.TransferCurrentHandler 将返回 ErrorHandler.aspx 的实例(如果在错误之后调用),而 HttpContext.Current.Handler 将返回 Default.aspx 的实例。

    【讨论】:

      【解决方案4】:

      不,来自 MSDN 上的 HttpContext.Current:“获取或设置当前 HTTP 请求的 HttpContext 对象。”

      换句话说,它是一个 HttpContext 对象,而不是一个 Page。

      您可以使用以下方法通过 HttpContext 访问 Page 对象:

      Page page = HttpContext.Current.Handler as Page;
      
      if (page != null)
      {
           // Use page instance.
      }
      

      【讨论】:

      • 投反对票,因为不正确。 HttpContext.Current.CurrentHandler 的答案是正确的!如果您执行 Server.Transfer,HttpContext.Current.Handler 将是上一页,HttpContext.Current.CurrentHandler 将是当前页
      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多