2011-07-28 45 views
1

请原谅我问一个世俗的新手问题,但我似乎被困在一个阶级生命周期的束缚。加载页面加载视图状态,保存在页面卸载(从基类) - C#Asp.net

所以,我有我的网页

public partial class DefaultPage : BasePage 
{ 
    ... 
} 

而且BasePage的是这样的:

public class BasePage : System.Web.UI.Page 
{ 
    private Model _model; 

    public BasePage() 
    { 
     if (ViewState["_model"] != null) 
      _modal = ViewState["_model"] as Modal; 
     else 
      _modal = new Modal(); 
    } 

    //I want something to save the Modal when the life cycle ends 

    [serializable] 
    public class Model 
    { 
     public Dictionary<int, string> Status = new Dictionary<int, string>();    
     ... //other int, string, double fields 
    } 

    public class PageManager() 
    { //code here; just some random stuff 
    } 
} 

现在我只是想获得模态在页面加载,这是我从构造函数来完成。 如何在页面卸载时将其保存?我不能使用析构函数,因为它不可靠。

此场景的最佳解决方案是什么?

谢谢。

回答

2

LoadViewStateSaveViewState是适当的方法。

protected override void LoadViewState(object savedState) 
    { 
     base.LoadViewState(savedState); 
     _model= (Model) ViewState["_model"]; 
    } 

    protected override object SaveViewState() 
    { 
     ViewState["_model"] = _model; 
     return base.SaveViewState(); 
    } 

使用这些方法保证了ViewState中已经从回传加载您尝试从它加载一个值之前,并且已经放置必要的值到ViewState中之前ViewState的呈现给输出。

+0

嗨,这是伟大的,但每次访问我的''_model''它回来与未设置为实例''对象引用...''例外? – LocustHorde

+1

@LocustHorde:_model从一个空值开始,直到你将其设置为其他值时,它将继续为null。你在哪里设置'_model'的值?你在哪里尝试访问它?你能设置断点来确定这些事件何时发生与LoadViewState和SaveViewState被调用有关吗? – StriplingWarrior

+0

好的,我的错误,我没有将它设置为任何页面加载。谢谢你们,你们帮助我的次数超过了我的数量! – LocustHorde