在asp.net页面上编译错误

Lea*_*ing 0 c# asp.net webforms

我有一个简单的asp.net webform页面,我用它来显示基于pageID的页面相关数据.

我正在尝试定义页面级变量,以便我可以访问此页面中使用的不同函数中的变量.但我收到的错误很少.例如,如果我的代码是

    public partial class PageHome : System.Web.UI.Page
    {
            int _LangID = 1;
            _LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
            int _PageID = 0;
            int _PID = Helper.GetPageID(_LangID, "Home.aspx");


    protected void Page_Load(object sender, EventArgs e)
    {
         int _LanguageID = _LangID;
        GetPageDetails(_PageID);
    }   

}
Run Code Online (Sandbox Code Playgroud)

然后我明白了

Error message:
Invalid token '=' in class, struct, or interface member declaration (_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));)
Invalid token '.' in class, struct, or interface member declaration  (_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));)
Method must have a return type  
Identifier expected 
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用在构造函数中定义这些变量

//public PageHome()
//{
    //int _LangID = 1;
    //_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
    //int _PageID = 0;
    //int _PID = Helper.GetPageID(_LangID, "Home.aspx");
//}
Run Code Online (Sandbox Code Playgroud)

然后我得到不同的错误

The name '_LangID' does not exist in the current context The name '_PageID ' does not exist in the current context

定义一次定义的页面级变量和在不同函数中访问的最佳方法是什么

更新: Helper.GetAppSetting("LangID_En")Helper.GetPageID(_LangID, "Home.aspx")函数在保存在的单独的类文件中定义App_Code/Helper/Helper.cs

更新二:根据JonSKeet答案工作代码.

public partial class PageHome : System.Web.UI.Page
    {
            int _LangID = 1;
            _LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
            int _PageID = 0;
    public PageHome()
    {
            int _PID = Helper.GetPageID(_LangID, "Home.aspx");
}

    protected void Page_Load(object sender, EventArgs e)
    {
         int _LanguageID = _LangID;
        GetPageDetails(_PageID);
    }   

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

你不能只有一个声明:

_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
Run Code Online (Sandbox Code Playgroud)

在一个类声明中.它必须在方法,构造函数或类似的东西中.

但是,鉴于您刚刚声明了变量,您可以简单地更改这两行:

int _LangID = 1;
_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
Run Code Online (Sandbox Code Playgroud)

......一个:

int _LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
Run Code Online (Sandbox Code Playgroud)

但是,你会在这里遇到错误:

int _PID = Helper.GetPageID(_LangID, "Home.aspx");
Run Code Online (Sandbox Code Playgroud)

因为你不能在初始化器中引用另一个实例字段.初始化必须在构造函数中发生...在这种情况下,为了清楚起见,我建议在构造函数中执行这两个操作:

public class PageHome : Page
{
    // Do you really not need to initialize this to something else?
    int _PageID = 0;
    int _LangID;
    int _PID;

    public PageHome()
    {
        _LangID = int.Parse(Helper.GetAppSetting("LangID_En"));
        _PID = Helper.GetPageID(_LangID, "Home.aspx");
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

另一方面,这些值是否实际上基于每页实例更改?也许它们实际上应该是静态场?(这里的大局很难说清楚.)

  • @KnowledgeSeeker:是的,你需要将*that*one放入构造函数中.将这个添加到答案中. (2认同)