Хранение списка <int>в viewstate - PullRequest
       6

Хранение списка <int>в viewstate

8 голосов
/ 08 сентября 2011

У меня есть страница aspx, которая имеет следующее:

  • Повторитель с кнопкой связи в каждом
  • Кнопка ссылки имеет целочисленное значение
  • Пользовательский элемент управления

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

Итак, я создал публичное свойство в пользовательском элементе управления следующим образом:

public List<int> ImageString {
    get {
        if (this.ViewState["ImageString"] != null) {
            return (List<int>)(this.ViewState["ImageString"]);
        }
        return new List<int>();
    }
    set { this.ViewState["ImageString"] = value; }
}

А потом я надеялся, что со своей страницы aspx я смогу добавить строку кода, чтобы добавить значение в список следующим образом:

this.LightBoxControl.ImageString.Add(value);

Проблема, которую я получаю, заключается в том, что значение фактически никогда не добавляется в список. Счет всегда равен нулю.

Я уверен, что просто неправильно установил свойство, но я не уверен, как его исправить ..

Любая помощь будет принята с благодарностью.

Спасибо Al

1 Ответ

17 голосов
/ 08 сентября 2011

Ваш получатель не прав. Это правильный вариант:

get {
    if (this.ViewState["ImageString"] == null) {
        this.ViewState["ImageString"] = new List<int>();
    }
    return (List<int>)(this.ViewState["ImageString"]);
}

Здесь вы сначала проверяете, есть ли в ViewState что-то, что вам нужно, и, если его нет, вы добавляете его туда. Затем вы возвращаете элемент из ViewState - он гарантированно будет там.

Ваше решение было плохим, потому что оно не поместило new List<int>() в ViewState

...