在asp.net页面上编译错误

时间:2015-02-11 08:15:10

标签: 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);
    }   

}

然后我得到

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

}

2 个答案:

答案 0 :(得分:5)

你不能只有这样的陈述:

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

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

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

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

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

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

    ...
}

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

答案 1 :(得分:0)

只是为了确保我从appsettings中获取tryparsing int 你可以制作某种类型的tryparse方法,你可以获得appsettings。这样,如果缺少设置并且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;
    }
}

您的班级助手也是以核心方式获取应用设置吗?我个人使用像

这样的东西
var debugSetting = ConfigurationManager.AppSettings["IsDebug"];