Get current System.Web.UI.Page from HttpContext?

92,473

Solution 1

No, from MSDN on HttpContext.Current: "Gets or sets the HttpContext object for the current HTTP request."

In other words it is an HttpContext object, not a Page.

You can get to the Page object via HttpContext using:

Page page = HttpContext.Current.Handler as Page;

if (page != null)
{
     // Use page instance.
}

Solution 2

You're looking for HttpContext.Handler. Since Page implements IHttpHandler, you'll obtain a reference to the currently executing page.You'll have to cast it, or at least try to cast it to the particular type you're looking for.

HttpContext.Current simply returns the singleton instance of HttpContext. Therefore, it is not and can never be, a page.

Solution 3

You may want to use HttpContext.Current.CurrentHandler if you want the precise page that is currently executing. For example, a request for Default.aspx is sent, but an error is thrown and you do a Response.Transfer to your custom ErrorHandler.aspx page. CurrentHandler will return the instance of ErrorHandler.aspx (if called after the error) whereas HttpContext.Current.Handler would return an instance of Default.aspx.

Share:
92,473

Related videos on Youtube

DucDigital
Author by

DucDigital

I'm a developer who is filling out this profile just to get the 'filled out everything' badge. =)

Updated on August 01, 2020

Comments

  • DucDigital
    DucDigital almost 4 years

    This is actually a two part question. First,does the HttpContext.Current correspond to the current System.UI.Page object?

    And the second question, which is probably related to the first, is why can't I use the following to see if the current page implements an interface:

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

    The general context is that some controls need to know whether they are executing as a SharePoint webpart, or as part of an Asp.Net framework.

    I have solved the problem by requiring the control to pass a reference to itself, and checking the Page property of the control, but I'm still curious why the above does not work.

    The compiler error is: Cannot convert System.Web.HttpContext to ...IWebBase via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion or null type conversion.

  • mike nelson
    mike nelson over 14 years
    Just a note to anyone reading this. The answer below is the same but with an example (ie you use HttpContext.Current.Handler).
  • Amin Ghaderi
    Amin Ghaderi almost 11 years
    I'm using the same code for my work , but I was so annoyed because I was not aware of the details of work details. So developed this code for my worke . I thought that Put code Here To help friends that have my problem. Thank John Saunders.
  • mike
    mike almost 8 years
    Down-Voted because incorrect. The answer with HttpContext.Current.CurrentHandler is correct! If you do a Server.Transfer, HttpContext.Current.Handler WILL BE THE PREVIOUS PAGE, HttpContext.Current.CurrentHandler WILL BE THE CURRENT PAGE