类的实例是在 aspx 页面的部分类中创建的。在 page_load 或按钮单击方法下,我试图将值设置为类。但是当每次回发发生时,都会创建新实例,并且我会丢失以前的值。
public partial class DatabaseSelection : System.Web.UI.Page
{
DBProperties dbpro;
Metadata obmeta;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dbpro = new DBProperties();
}
最佳答案
如果应用程序需要这个实例,请将其放入应用程序或使用单例集合:
应用程序["Foo"] = new MyClass(); 查看其他答案。
如果您需要它用于单个请求(这里似乎不太可能):
HttpContext.Current.Items["Foo"] = new MyClass();
如果您需要跨请求执行此操作,则可以根据您的情况选择以下所有选项:
- 序列化为 Cookie(将在每次请求时传输,因此如果管道有问题,请不要使用它)。适用于每个用户数据。
- 存储在 Session 中:Session["Foo"] = new MyClass();//我个人不喜欢这个选项,因为它会随着用户群的增长而增加你的内存压力,但如果它很小,那么这是一个不错的选择,因为它不会增加带宽消耗和性能。适合每个用户存储。并且可以配置对数据库或内存(以及其他)的持久性。
- 存储在缓存中。好处是可以很好地控制生命周期,并且可以根据您使用的 key 灵活地控制每个用户。
- 存储在 ViewState 中。适合单个请求,可扩展,但会增加负载。
- 存储在hidden var中(和ViewState差不多)
我不太确定我会推荐单例模式。从技术上讲,只要您的 AppDomain 有效地类似于 Application 变量,单例就会一直存在。
关于c# - 如何在 asp.net 中只创建一个类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561604/