目前,我收到错误“非静态字段方法或属性需要对象引用”。我的代码如下:
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表示期望类的字段'错误。这是一个很好的实施吗?
编辑:我将在下面标记正确的答案并提出一个新问题,因为我认为这是值得的。
答案 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的值并传递它。