【发布时间】:2009-07-23 18:46:34
【问题描述】:
我正在使用数据库动态构建页面来存储页面信息,并使用 .NET (C#) 来构建页面。该过程的一部分是根据数据库中的内容设置母版页(在代码隐藏中),据我所知,这必须在Page_PreInit 中完成。
我的问题是如何将对象和变量从Page_PreInit 传递到Page_Load。
我已经能够使其工作如下,但使用此方法时出现随机编译错误:
public partial class BuildPage : System.Web.UI.Page
{
protected static string pageData;
protected void Page_PreInit(object sender, EventArgs e)
{
--- SET pageData = DATA FROM DATABASE, AND SET MASTERPAGE ---
}
protected void Page_Load(object sender, EventArgs e)
{
--- USE pageData TO BUILD AND DISPLAY THE REST OF THE PAGE ---
}
}
由于各种原因,我没有使用 Visual Studio 来编译页面,只是让 .NET 在第一个页面请求时即时编译。我收到了两条错误消息:
1) “CS0102:‘BuildPage’类型已经包含‘pageData’的定义”
2) “ASPNET:确保此代码文件中定义的类与 'inherits' 属性匹配,并且它扩展了正确的基类(例如 Page 或 UserControl)。”
奇怪的是,有时页面会在第一个 Web 请求时编译。并且,对于那些在第一次请求时没有出现的情况,在随机数次页面刷新后,它会完美编译。编译后一切似乎都可以正常工作,直到我对后面的代码进行另一次更改并且它必须重新编译。
我似乎只在使用该方法在Page_PreInit 和Page_Load 之间共享变量时遇到那些编译错误。换句话说,如果我只是从数据库中请求数据两次,一次在“Page_PreInit”中,一次在“Page_Load”中,我永远不会收到这些错误。但我真的不希望数据库负载翻倍。
所以我的问题实际上有两个部分,首先,这是一种可以接受的共享变量的方式,还是有更好的方式将数据从Page_PreInit 传递到Page_Load?
其次,如果这是一种可以接受的方式,这些错误是否不相关?是否有人见过类似的错误在重复的 Web 请求之后就消失了?
感谢您的任何帮助! 饲料
【问题讨论】:
-
您是否总是使用相同的数据进行测试? IE。当您尝试在 PageLoad 中访问它时,有时 pageData 是否为 null,因为数据库中缺少某些内容?
-
感谢大家的帮助,你们都有可靠的答案,问题出在“静态”修饰符上。 StackOverflow.Com 很棒。
标签: c# .net compiler-construction webpage code-behind