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