asp.net 页上的编译错误

Compile error on asp.net page

我有一个简单的 asp.net 网络表单页面,我用它来显示基于 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);
    }   

}

然后我得到

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 

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

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

然后我得到不同的错误,例如

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") 函数定义在单独的 class 文件中,保存在 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);
    }   

}

你不能只有这样的声明:

_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));

在 class 声明中。它必须在方法、构造函数或类似的东西中。

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

int _LangID = 1;
_LangID = int.Parse(Helper.GetAppSetting("LangID_En"));

...到一个:

int _LangID = int.Parse(Helper.GetAppSetting("LangID_En"));

但是,您会在此处遇到错误:

int _PID = Helper.GetPageID(_LangID, "Home.aspx");

因为您不能在另一个初始化程序中引用一个实例字段。该初始化必须在构造函数中进行...在这种情况下,为了清楚起见,我建议在构造函数中对它们进行 both

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");
    }

    ...
}

另一方面,这些值实际上是否在每个页面实例的基础上发生变化?也许它们实际上应该是静态字段? (这里很难说出大局。)

只是为了确保我会从 appsettings 中尝试解析 int 您可以在 中创建某种 tryparse 方法,您可以获得应用程序设置。这样,如果缺少设置并且 int 将具有空值,则不会出现错误。

protected void Page_Load(object sender, EventArgs e)
    {
int? _LangID = TryParse2(Helper.GetAppSetting("LangID_En"));
}
int? TryParse2(string s) {
    int i;
    if (!int.TryParse(s, out i)) {
        return null;
    } else {
        return i;
    }
}

您的 class 助手是否以正确的方式获取应用程序设置?我个人使用

之类的东西
var debugSetting = ConfigurationManager.AppSettings["IsDebug"];