Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net页面上的编译错误_C#_Asp.net_Webforms - Fatal编程技术网

C# asp.net页面上的编译错误

C# asp.net页面上的编译错误,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个简单的asp.net webform页面,用于根据pageID显示与页面相关的数据 我试图定义页面级别的变量,以便可以访问该页面中使用的不同函数中的变量。但我几乎没有犯错误。例如,如果我的代码是 public partial class PageHome : System.Web.UI.Page { int _LangID = 1; _LangID = int.Parse(Helper.GetAppSetting("Lang

我有一个简单的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");
//}
然后我得到不同的错误,比如

当前上下文中不存在名称“\u LangID”
当前上下文中不存在名称“\u PageID”

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

更新
Helper.GetAppSetting(“LangID_En”)
Helper.GetPageID(\u LangID,“Home.aspx”)
函数在单独的类文件中定义,位于
App\u 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"));
在类声明中。它必须在方法、构造函数或类似的东西中

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

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

    ...
}

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

你不能只说:

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

    ...
}

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

只是为了确保我建议从appsettings中对int进行trypars 你可以做一些类似于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;
    }
}
你的类助手是否也以corect的方式获取应用程序设置?我个人喜欢用这样的东西

var debugSetting = ConfigurationManager.AppSettings["IsDebug"];

只是为了确保我建议从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;
    }
}
你的类助手是否也以corect的方式获取应用程序设置?我个人喜欢用这样的东西

var debugSetting = ConfigurationManager.AppSettings["IsDebug"];

我不清楚-您是否希望您的
Page\u Load
方法成为
PageHome
类的一部分?因为现在不是…@JonSkeet,刚刚更新了我的代码,因为我在本例中错误地定义了varibale后关闭了类。我不清楚-您是否希望您的
Page\u Load
方法成为
PageHome
类的一部分?因为现在还没有…@JonSkeet,刚刚更新了我的代码,因为我在这个例子中错误地定义了varibale之后关闭了类。即使我像你提到的那样做,我也会得到
int\u PID=Helper.GetPageID(_LangID,“Home.aspx”)的错误
这一行作为
字段初始值设定项不能引用非静态字段、方法或属性'PageHome.\u LangID'
@knowledgeseek:对,您需要将其放入构造函数中。将把它添加到答案中。即使我像你提到的那样做,我也会得到
int\u PID=Helper.GetPageID(_LangID,“Home.aspx”)的错误
这一行作为
字段初始值设定项不能引用非静态字段、方法或属性'PageHome.\u LangID'
@knowledgeseek:对,您需要将其放入构造函数中。我会在答案中加上这个。