C# asp.net页面上的编译错误
我有一个简单的asp.net webform页面,用于根据pageID显示与页面相关的数据 我试图定义页面级别的变量,以便可以访问该页面中使用的不同函数中的变量。但我几乎没有犯错误。例如,如果我的代码是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
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:对,您需要将其放入构造函数中。我会在答案中加上这个。