2011-09-08 13 views
8

Mam stronę aspx, która ma następujący:Zapisywanie Lista <int> w stan wyświetlania

  • Repeater z LinkButton w każdym
  • przycisk linku ma commandargument o wartości całkowitej
  • użytkownik sterowanie

Chodzi o to, że gdy użytkownik kliknie przycisk linku, wartość komendy zostanie zapisana na liście. Nie ma problemu, możesz pomyśleć, jednak potrzebuję wartości do zapisania na liście w sterowaniu użytkownika, a nie na stronie ASPX. Lista musi być utrwalona w postbackach, więc również musi być przechowywana w stanie widoku.

Stworzyłem więc własność publiczną kontrolą użytkownika tak:

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; } 
} 

A potem miałem nadzieję, że z mojej strony aspx mogę dodać linię kodu, aby dodać wartość do listy jak tak :

this.LightBoxControl.ImageString.Add(value); 

Problem polega na tym, że wartość nigdy nie jest dodawana do listy. Liczba jest zawsze zerowa.

Jestem pewien, że jej po prostu, że mam ustawić właściwość się źle, ale nie jestem pewien, jak to dobrze ..

Każda pomoc będzie mile widziana.

Dzięki Al

Odpowiedz

17

Twój getter jest źle. Ten wariant jest prawidłowy:

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

Tutaj najpierw sprawdzić, czy istnieje coś trzeba w ViewState już, a jeśli nie jest, należy dodać go tam. Następnie zwracasz przedmiot z ViewState - na pewno tam jest.

Twoje rozwiązanie było złe, ponieważ nie umieścić new List<int>() do ViewState

+0

Absolutnie doskonały - niesamowite, jak nie można zobaczyć na drewno czasami drzew! Dzięki za pomoc. – higgsy