2013-08-19 60 views
2

我有一个ControllerBase抽象类,如下所示。如何在抽象类的静态属性中使用HttpContext.Current.Session。

using System.Web; 
using System.Web.Mvc; 
public abstract class ControllerBase : Controller 
{ 
    public static string SesssionId 
    { 
     get { return HttpContext.Current.Session["SessionId"]; } 
    } 
} 

我收到错误

“对象引用是所必需的非静态字段,方法或 属性“System.Web.Mvc.Controller.HttpContext.get”

但是我在其他静态类中使用过,并没有得到上述错误。

我不知道如何HttpContext可访问,但不是当前。

任何人都可以澄清我,上述有什么问题。

+0

改变'公共字符串SessionId' – wudzik

+3

你可以做的@wudzik说。真正的问题是,'Controller'本身具有'HttpContext'属性,所以编译器认为你想使用它。你可以声明它是全限定的:'System.Web.HttpContext.Current' –

回答

6

您的基类Controller指定了HttpContext属性本身。 因此,在派生类ControllerBase中使用它时,编译器认为您要引用基类的此属性。

您可以使属性非静态,如wudzik在第一条评论中所建议的。 我想这将是更干净的方式来做到这一点。

如果你需要保持这个属性静态的,你必须告诉编译器,您要使用HttpContext类的命名空间System.Web的:

public static string SesssionId 
{ 
    get { return System.Web.HttpContext.Current.Session["SessionId"]; } 
} 
+0

感谢你的回应..它的工作就像一个魅力。 :-) – Sravan