ASP.NET Inkrementacja pola klasy w pliku z kodem ukrytym


(andrzej20) #1

W technologii ASP.NET jestem raczej nowicjuszem.

Przy tworzeniu formularza np.: jakisformularz.aspx kod obsługi danej strony można umieścić w osobnym pliku:

jakisformularz.aspx.cs. I tak robię. Chodzi mi o to, że chciałbym zadeklarować w tym pliku pole przykładowo iLicznik,

którego wartość nie będzie zerowana za każdym uruchomieniem strony.

Np.:

public partial class _Default : System.Web.UI.Page

{

    int iLicznik;

    .......

    .......

    protected void BtnPrzycisk_Click(object sender, EventArgs e)

    {

      ++iLicznik;

    }

    .......

    .......

}

Kiedy nacisnę przycisk pole iLicznik jest inkrementowane - ma wartość 1,

jednak po ponownym naciśnięciu tego przycisku pole iLicznik znów ma wartość 1,

a chciałbym aby miało 2, po kolejnym 3 itd.

Wygląda mi na to, że przy każdym kliknięciu przycisku tworzony jest nowy obiekt klasy _Default

i dlatego iLicznik przed inkrementacją ma wartość 0.

Czy są jakieś ustawienia na poziomie serwera lub strony aby przy pierwszym wywołaniu strony

obiekt strony był kompilowany, ładowany do pamięci i tam powiedzmy rezydował i aby przy kolejnym żądaniu

strony stronę obsługiwał ten sam obiekt a nie za każdym razem nowy?

Lub czy jest może jakieś inne prostsze rozwiązanie tego problemu (inkrementacji pola iLicznik)?


(Drobok) #2

Ja też jestem zielony, ale czy nie powinieneś tego licznika przechowywać w bazie / pliku ?


(kowal.luk) #3

poczytaj o ViewState i Session


(andrzej20) #4

Taki licznik na stronie najczęściej nie jest dobrym rozwiązaniem to fakt, lepszym jest umieszczenie go w bazie. Ale czasami się to przydaje. Chodzi jednak ogólnie jak przechować wartości pól obiektu strony między poszczególnymi wywołaniami strony pomijając ciasteczka i sesje.


(kowal.luk) #5

można umieścic ukrytego labela na stronie, który bedzie tym licznikiem, i rzutować na niego wartość int na string, jesli w obrębie jednej strony to polecam ViewState, lepiej nie bedzie


(Tomek Matz) #6

Jeśli nie interesują Cię cookies, sesja serwera i wspomniany wyżej mechanizm ViewState to pozostają tylko pliki i baza danych. Innego rozwiązania nie ma. A dlaczego tak jest?

Opis zaczerpnięty z artykułu mówiącego o tym jak korzystać z sesji serwera w ASP .NET http://msdn.microsoft.com/en-us/library/ms178581.aspx


(andrzej20) #7

Tak to jest kiedy się zmienia technologie. Kiedyś pracowałem z jsp i serwletami. Tam takie coś bez problemu się implementowało. Czasami się to przydawało.

W innej technologii należy się liczyć z tym, że ten sam problem rozwiązuje się całkiem inaczej. Trudno się będzie przestawić.

Poczytam o ViewState. Dziękuję za pomoc.