pole zmienia swoją wartość na domyślną po opuszczeniu try

pole zmienia swoją wartość na domyślną po opuszczeniu try
GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Witam,
Kiedy wykonuje się poniższy kod:

Kopiuj
           StreamWriter sw1;
                try
                {
                    zm.idUser = dekoduj(Request["id"]);
                    zm.haslo = Request["haslo"];
                    sw1 = new StreamWriter(pathMain + "try.txt");
                    sw1.WriteLine(zm.haslo);
                    sw1.Close();

                }
                catch (Exception ex)
                {
                    Response.Redirect("error.aspx");
                }
            

            if (zm.idUser == 0)
            {  sw1 = new StreamWriter(pathMain + "catch2.txt");
                sw1.WriteLine(zm.haslo);
                sw1.Close();
                Response.Redirect("error.aspx");
            }

No i teraz dlaczego te pliki tekstowe które mi się stworzyły to:
W try.txt mam zm.haslo z jakas konkretna wartoscia natomiast w catch2.txt mam zm.haslo i w srodku .txt jest pusto.

Czyli tak jakby w try mam przypisane wartosci a po opuszczeniu try nagle one się czyszczą... dlaczego tak się dzieje?

Ten kod działa prawidłowo a jest na tej samej zasadzie napisany:

Kopiuj
 class zmienne
    {
        public int a;
        public string b;
    }
    class Program
    {
        static void Main(string[] args)
        {
            zmienne zm = new zmienne();
            if (zm.a == 0)
            {
                try
                {
                    zm.a = 10;
                    Console.WriteLine(zm.a);
                    zm.b = "lala";
                    Console.WriteLine(zm.b);

                }
                catch { }
                Console.WriteLine(zm.a);
                Console.WriteLine(zm.b);
            }
            Console.WriteLine(zm.a);
            Console.WriteLine(zm.b);

            Console.ReadKey();
        }
    } 

Tutaj zwraca mi za każdym razem 10 i "lala".

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

A usuwasz za każdym razem te pliki i masz pewność, że za każdym razem tobie je tworzy. Możliwe że leci wyjątek

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Mam pewność.

Natomiast gdy zm.idUser oraz zm.haslo usunę i stworzę lokalne zmienne statyczne to wszystko działa... tylko, że nie mogą one być statyczne bo to web service i może być konflikt:

Kopiuj
 StreamWriter sw1;
public static int idUser;
public static string haslo;
                try
                {
                    idUser = dekoduj(Request["id"]);
                    haslo = Request["haslo"];
                    sw1 = new StreamWriter(pathMain + "try.txt");
                    sw1.WriteLine(haslo);
                    sw1.Close();
 
                }
                catch (Exception ex)
                {
                    Response.Redirect("error.aspx");
                }
 
 
            if (zm.idUser == 0)
            {  sw1 = new StreamWriter(pathMain + "catch2.txt");
                sw1.WriteLine(haslo);
                sw1.Close();
                Response.Redirect("error.aspx");
            }

To dziala...

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

Daj więcej kodu wokół tego fragmentu. Nie widać deklaracji haslo chociażby

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Dowiedziałem się, że jakby ten webservice jest na nowo odpalany i w tym momencie tworzy się nowa instancja klasy zm.

Po prostu strona na nowo jest uruchamiana i to właśnie z tego powodu zwykłe zmienne są zerowane a statyczne dalej istnieją.

Moje pytanie jest takie, jak skorzystać ze zmiennej sesyjnej w C# ASP.NET? Czy jest coś takiego? Bo w Google coś znaleźć nie potrafię.

Ewentualnie jakieś inne propozycje.

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

Poczytaj o ViewState.

EDIT:
To dotyczy WebForms. W MVC nie robiłem.
http://stackoverflow.com/questions/23623229/what-is-the-equivalent-of-viewstate-in-asp-net-mvc

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
Grzegorion napisał(a):

Moje pytanie jest takie, jak skorzystać ze zmiennej sesyjnej w C# ASP.NET? Czy jest coś takiego?

Jest i dla zmyłki nazywa się Session.

Tylko Ty w końcu piszesz w ASP.NET aplikację czy WebService? A jeśli tak, to w jakiej technologii, bo między WebForms, MVC, ASMX i WCF są jednak różnice.

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Session zadziałało! Super dziękuje za pomoc.

To Web Service nie znam się na tych technologiach za bardzo gdyż na razie znam WPF na desktopa i windows phone tylko a tutaj na praktykach dostałem Web Service :)
Rozszerzenia plików to .aspx, .asmx, .asmx.cs i jest web.config :P

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Tylko jedno pytanie jeszcze.

Teraz gdy jakiś dłuższy czas nie ma aktywności to ta zmienna sesyjna się kasuje no i kiedy wykonuje polecenie, w którym jest sprawdzana autoryzacja to teraz mi wywala błąd a powinien wywalić obrazek i informację dla użytkownika.

Jaki warunek musi być spełniany jeśli sesja wygaśnie i chce aby przeniósł użytkownika na Redircet("error.aspx"); ?

szalonyfacet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Dąbrowa Górnicza
0

warunek, ze sesja dla danego uzytkownika musi istniec, wiec sprawdzasz czy istnieje i robisz przekierowanie jak nie istnieje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.