我有一个简单的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);
}
}
答案 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"];