当前位置:  开发笔记 > 编程语言 > 正文

从HttpContext获取当前的System.Web.UI.Page?

如何解决《从HttpContext获取当前的System.Web.UI.Page?》经验,为你挑选了3个好方法。

这实际上是一个两部分问题.首先,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.



1> Ash..:

不,来自HttpContext.Current上的MSDN:"获取或设置当前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将成为当前页面

2> Kilhoffer..:

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

HttpContext.Current只需返回HttpContext的单例实例.因此,它不是也不可能是一个页面.


只是给读过这篇文章的人留言.下面的答案是相同的,但有一个例子(即你使用HttpContext.Current.Handler).

3> 小智..:

HttpContext.Current.CurrentHandler如果您想要当前正在执行的精确页面,可能需要使用.例如,发送了一个Default.aspx请求,但是抛出了一个错误,您执行Response.Transfer自定义的ErrorHandler.aspx页面.CurrentHandler将返回ErrorHandler.aspx的实例(如果在错误之后调用),则HttpContext.Current.Handler返回Default.aspx的实例.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有