Загрузить состояние просмотра при загрузке страницы, сохранить при выгрузке страницы (из базового класса) - С# 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
    }
}

Теперь я просто хочу получить Modal при загрузке страницы, что я делаю из конструктора. Как я могу сохранить его при выгрузке страницы? Я не могу использовать деструктор, так как он ненадежен.

Какое лучшее решение для этого сценария?

Спасибо.


person LocustHorde    schedule 28.07.2011    source источник


Ответы (1)


LoadViewState и SaveViewState подходят для этого.

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

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

Использование этих методов гарантирует, что ViewState был загружен из PostBack до того, как вы попытаетесь загрузить из него значение, и что вы поместили необходимые значения в ViewState до того, как ViewState будет отображено на выходе.

person StriplingWarrior    schedule 28.07.2011
comment
Привет, это здорово, но каждый раз, когда я обращаюсь к своему _model, он возвращается с исключением object reference not set to an instance...? - person LocustHorde; 28.07.2011
comment
@LocustHorde: _model начинается с нулевого значения и будет оставаться нулевым, пока вы не установите для него что-то другое. Где вы устанавливаете значение _model? Где вы пытаетесь получить к нему доступ? Можете ли вы установить точки останова, чтобы определить, когда эти события происходят в связи с вызовом LoadViewState и SaveViewState? - person StriplingWarrior; 28.07.2011
comment
Хорошо, моя ошибка, я ничего не устанавливал при загрузке страницы. Большое спасибо, вы помогли мне больше раз, чем я могу сосчитать! - person LocustHorde; 28.07.2011