Поддерживать общий список между постбэками - PullRequest
5 голосов
/ 14 сентября 2010

Вот что у меня в коде:

List<Event> events = new List<Event>();

protected void Page_Load(object sender, EventArgs e)
{

}

protected void AddEvent_Click(object sender, EventArgs e)
{
    Event ev = new Event();

    ev.Name = txtName.Text;

    events.Add(ev);
}

Я хочу добавлять элемент в список каждый раз, когда нажимается кнопка Добавить, но список сбрасывается после каждой обратной передачи. Как я могу сохранить данные в списке между постбэками?

Ответы [ 4 ]

8 голосов
/ 14 сентября 2010

Я часто использую подобную технику, хотя имейте в виду, что это может привести к тому, что ваше состояние просмотра (отображаемое в браузере) станет довольно большим:

public List<Event> Events 
{
  get { return (List<Event>)ViewState["EventsList"]; }
  set { ViewState["EventsList"] = value; }
}

Затем, когда вы захотите использовать списоквы бы сделали что-то вроде этого:

public void AddToList()
{
    List<Event> events = Events; // Get it out of the viewstate
    ... Add/Remove items here ...
    Events = events; // Add the updated list back into the viewstate
}

Также обратите внимание, что ваш класс Event должен быть сериализуемым, но это обычно так же просто, как добавить атрибут [Serializable] к классу (если только он не является действительно сложным классом).).

1 голос
/ 14 сентября 2010

Сохранить список в сеансе или состоянии просмотра.

protected void AddEvent_Click(object sender, EventArgs e)
{
    Event ev = new Event();

    ev.Name = txtName.Text;
    if(Session["events"] == null)
    {
      Session["events"] = new List<Event>();
    }
    var events = (List<Event>)Session["events"];
    events.Add(ev);
}
1 голос
/ 14 сентября 2010

Вам нужно как-то вести список самостоятельно. Вы можете вставить его в ViewState, отправить в базу данных, сохранить в сеансе, поместить в HiddenField на странице ...

0 голосов
/ 15 мая 2013

Спасибо CodingGorilla, это решило мою проблему. Но я должен добавить еще одну вещь для новичков.

List<Event> events = Events; // Get it out of the viewstate
**You should check whether events is null** 
Events = events; // Add the updated list back into the viewstate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...