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

Odpowiedz Nowy wątek
2015-07-06 11:17
0

Witam,
Kiedy wykonuje się poniższy kod:

           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:

 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".

Pozostało 580 znaków

2015-07-06 11:22
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

Pozostało 580 znaków

2015-07-06 11:31
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:

 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...

edytowany 1x, ostatnio: Grzegorion, 2015-07-06 11:32

Pozostało 580 znaków

2015-07-06 12:40
0

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

edytowany 1x, ostatnio: Sarrus, 2015-07-06 12:41

Pozostało 580 znaków

2015-07-06 12:56
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.

Pozostało 580 znaków

2015-07-06 12:57
0

Poczytaj o ViewState.

EDIT:
To dotyczy WebForms. W MVC nie robiłem.
http://stackoverflow.com/ques[...]t-of-viewstate-in-asp-net-mvc

edytowany 1x, ostatnio: Sarrus, 2015-07-06 12:59
A co ma MVC do tego? - somekind 2015-07-06 13:23
Chodziło mi o ASP.NET MVC. Swego czasu pisałem w WebFormsach i tam używało się ViewState do zachowania stanu między postbackami. Autor nie napisał w czym robi i jak to robi. - Sarrus 2015-07-06 14:44

Pozostało 580 znaków

2015-07-06 13:30
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2015-07-06 13:30

Pozostało 580 znaków

2015-07-06 13:53
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

edytowany 1x, ostatnio: Grzegorion, 2015-07-06 13:53

Pozostało 580 znaków

2015-07-06 13:58
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"); ?

Pozostało 580 znaków

2015-07-06 22:39
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0