无法访问静态上下文中的非静态字段

时间:2014-08-28 07:59:45

标签: c# asp.net-mvc-4 webforms

我在Visual Studio 2010中编写Cannot access non-static field _cf in static context时遇到错误,有人可以解释一下我收到此消息的原因以及可能的解决方法吗?

CommonFunctions.cs

namespace WebApplication1.Functions
{
    public class CommonFunctions
    {
        public string CurrentUser()
        {
            string login = HttpContext.Current.User.ToString();
            string[] usplit = login.Split('\\');
            string name = usplit[1];
            return name;
        }
    }
}

Team.aspx.cs

namespace WebApplication1
{
    public partial class Team : System.Web.UI.Page
    {
        private readonly CommonFunctions _cf = new CommonFunctions();

        public string CurrentUser = _cf.CurrentUser();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(CurrentUser))
            {
                // Do stuff here
            }
            else
            {
                // Do other stuff here
            }
        }
    }
}

我可以将CurrentUser代码直接放入protected void Page_Load函数中,但由于我需要在整个项目中重用CurrentUser,所以复制似乎很荒谬。

非常感谢任何帮助: - )

2 个答案:

答案 0 :(得分:4)

在构造函数中进行设置会更有意义:

namespace WebApplication1
{
    public partial class Team : System.Web.UI.Page
    {
        private readonly CommonFunctions _cf;

        public string CurrentUser;

        public Team() 
        {
            _cf = new CommonFunctions();
            CurrentUser = _cf.CurrentUser();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(CurrentUser))
            {
                // Do stuff here
            }
            else
            {
                // Do other stuff here
            }
        }
    }
}

答案 1 :(得分:0)

您无法通过调用_cf字段上的方法来初始化当前用户字段。这两个字段没有此执行的特定顺序。可以首先初始化CurrentUser。