2016-04-29 4 views
1

Я пытаюсь сохранить некоторые пользовательские объекты в List, сохраняя их между postbacks через сеанс. Но по какой-то причине список не обновляется, показывая на Debug или GridView.сеанс ASP.NET не сохраняет данные списка между postbacks

List<Book> booklist; 
protected void Page_Load(object sender, EventArgs e) { 
    if (Session["InitialBooklist"] == null) { 
     booklist = new List<Book>(); 
     Session.Add("InitialBooklist", booklist); 
    } else { 
     booklist = Session["InitialBooklist"] as List<Book>; 
     GridView1.DataSource = booklist; 
     GridView1.DataBind(); 

     foreach (Book book in booklist) { 
      System.Diagnostics.Debug.Write(book.ToString()); 
     } 
    } 
} 

А вот соответствующая часть метода, который добавляет кнопку к строке в таблице (другое дело с GridView), и дает ему обработчик щелчка ...

TableCell addButtonCell = new TableCell(); 
    Button addButton = new Button(); 
    addButton.Text = "Add"; 
    addButton.Click += delegate(object sender1, EventArgs e1) { 
     addButton_Click(sender1, e1, title, author, price, coverURL, ISBN, numPages, amazonURL); 
    }; 
    addButtonCell.Controls.Add(addButton); 
    row.Cells.Add(addButtonCell); 

Наконец, вот обработчик кликов ...

public void addButton_Click(object sender, EventArgs e, String title, String author, String price, String coverURL, String ISBN, String numPages, String amazonURL) { 
    booklist.Add(new Book(title, author, price, coverURL, ISBN, numPages, amazonURL)); 
} 
+0

выглядеть ваше кодирование неправильно. Почему вы не проверяете событие isPostBack Page_Load ?. Если вы не проверяете isPostBack, ваш книжный список всегда будет null. –

ответ

0

Пожалуйста, добавьте и установите флажок isPostBack в Page_Load. Пожалуйста, попробуй таким образом, но я еще не придумал.

List<Book> booklist; 
 
protected void Page_Load(object sender, EventArgs e) { 
 

 
\t if(!isPostBack){ 
 
\t \t if (Session["InitialBooklist"] == null) { 
 
\t \t \t booklist = new List<Book>(); 
 
\t \t \t Session.Add("InitialBooklist", booklist); 
 
\t \t } else { 
 
\t \t \t booklist = Session["InitialBooklist"] as List<Book>; 
 
\t \t \t GridView1.DataSource = booklist; 
 
\t \t \t GridView1.DataBind(); 
 

 
\t \t \t foreach (Book book in booklist) { 
 
\t \t \t \t System.Diagnostics.Debug.Write(book.ToString()); 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
}

+0

Добавил его, ничего не сделал, к сожалению. Список по-прежнему равен нулю. – Vigilant

0

Ваша страница сессии "только для чтения"? Проверьте свои атрибуты страницы.

Я также сделал небольшую модификацию ниже:

List<Book> booklist; 
protected void Page_Load(object sender, EventArgs e) { 
    if (Session["InitialBooklist"] == null) { 
     booklist = new List<Book>(); 
     Session.Add("InitialBooklist", booklist); 
    } 

if(!isPostBack){ 
     booklist = Session["InitialBooklist"] as List<Book>; 
     GridView1.DataSource = booklist; 
     GridView1.DataBind(); 

     foreach (Book book in booklist) { 
      System.Diagnostics.Debug.Write(book.ToString()); 
     } 
     } 
} 
+0

Не работает, к сожалению. Список по-прежнему отображается как null. – Vigilant

Смежные вопросы