如何创建HttpContext的实例?

时间:2009-06-09 18:32:18

标签: c# asp.net

目前,我收到错误“非静态字段方法或属性需要对象引用”。我的代码如下:

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
        }
     }
}

目前,我的每个方法都需要使用cd,因此我不是在每个方法中创建一个变量,而是寻找一种在类中声明它并让它可用于所有方法的方法。当我尝试在方法中设置cd时,它工作正常。我已经google了,似乎我必须有一个Page的实例才能在那里使用,但这不起作用。所以我真的误解了它是如何工作的。谁能指出我正确的方向?

编辑:我将静态关键字添加到cd,以便解决'cd表示期望类的字段'错误。这是一个很好的实施吗?

编辑:我将在下面标记正确的答案并提出一个新问题,因为我认为这是值得的。

3 个答案:

答案 0 :(得分:6)

尝试使用System.Web.HttpContext.Current

答案 1 :(得分:1)

使用已建议的HttpContext.Current。

对于您的其余问题:尝试是否可以在OnInit中创建cd字段,然后在OnLoad和其他方法中使用它。您的问题可能是在构造Page对象时HttpContext尚不可用。 (见the ASP .NET Page Life Cycle

答案 2 :(得分:1)

Protip:将cookie包装在受保护的属性中:

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

然后您的所有方法都可以在页面上引用它。我怀疑你可能想要做的是在一个属性中包含一个特定的cookie的值并传递它。