2009-06-09 21 views
0

Derzeit erhalte ich den Fehler "eine Objektreferenz ist für die nichtstatische Feldmethode oder -eigenschaft erforderlich". Mein Code ist wie folgt:Wie erstelle ich eine Instanz von HttpContext?

using MyApp.Global; 

namespace MyApp.MyNamespace 
{ 
    public class MyClass:System.Web.UI.Page 
    { 
     //Toolbox is inside Global, GetCurrentCookieData is a static method 
     private CookieData cd = Toolbox.GetCurrentCookieData(HttpContext.Current); 
     //the above was changed and resolved the first error, but another error 
     //just popped up. Below, I get the error: cd denotes field 
     //where class was expected 
     private int CompanyID = Util.GetCompanyIDByUser(cd.Users); 

     protected override void OnLoad(EventArgs e) 
     { 
      //snip 
     }   

     protected void MyEventHandler(object sender, EventArgs e) 
     { 
      //snip 
     } 
    } 
} 

Derzeit jeder meiner Methoden muss cd verwenden, so dass stattdessen eine Variable innerhalb jeder Methode zum Erstellen, ich war auf der Suche nach einer Möglichkeit, es in der Klasse zu erklären und habe es verfügbar zu allen Methoden. Wenn ich versuche, CD innerhalb der Methoden zu setzen, funktioniert es gut. Ich habe gegoogelt, und es scheint, dass ich eine Instanz von Page haben müsste, um dort zu verwenden, aber das funktioniert nicht. Ich verstehe wirklich nicht, wie das funktioniert. Kann mir jemand in die richtige Richtung zeigen?

Edit: Ich fügte static keyword zu cd, um die 'CD identifiziert Feld, in dem Klasse erwartet wurde' Fehler. Ist das eine gute Umsetzung?

Edit: Ich werde nur die richtige Antwort unten markieren und eine neue Frage stellen, wie ich denke, es verdient.

Antwort

6

Versuchen Sie, System.Web.HttpContext.Current zu verwenden.

+0

Es sieht so aus, als ob das funktioniert hat, aber ich muss meine Frage klären, weil es so aussieht, als ob etwas mehr dran ist. –

1

Verwenden Sie HttpContext.Current wie bereits vorgeschlagen.

Für den Rest Ihrer Frage: Versuchen Sie, wenn Sie das CD-Feld in OnInit erstellen können, und verwenden Sie es anschließend in Ihrem OnLoad und anderen Methoden. Ihr Problem ist wahrscheinlich, dass der HttpContext noch nicht verfügbar ist, wenn das Page-Objekt erstellt wird. (Siehe the ASP .NET Page Life Cycle)

1

Protip: Wickeln Sie das Cookie in einem geschützten Eigenschaft:

protected CookieData CurrentCookie 
{ 
    get { return HttpContext.Current.CookieData; } 
} 

Dann werden alle Ihre Methoden, die auf der Seite verweisen können. Ich würde vermuten, dass Sie wahrscheinlich den Wert eines bestimmten Cookies in eine Eigenschaft einschließen und diesen übergeben möchten.

Verwandte Themen