2013-06-08 14 views
8

Napisałem wiele stron internetowych z PHP. Teraz muszę stworzyć stronę internetową z ASP MVC 4 (C#) i utknąłem w Sesji.Pobierz zmienne Sesji do ASP.NET MVC 4 (maszynki do golenia, widok)

I.E. użytkownik powinien przejść do strony logowania, podać swój login i hasło. Jeśli są poprawne, w sterowniku ustawić sesję z USERID takiego:

Session["UserId"] = 10 

Wartość ta UserId służy do pokazywania PartialViews (formularz logowania lub (po zalogowaniu) niektóre menu aplikacji). Jak mogę uzyskać ten UserId wewnątrz widoku Razor?

Następnie w widoku:

if (Session.UserId == 10) { @Html.Partial("LoggedMenu") } 

Mam wyjątek z StackOverflow. :/

+0

można dodać Asp lub podobny tag proszę? –

+0

Wygląda na to, że w tym scenariuszu nie powinno się używać sesji. UserId powinien być częścią modelu (lub jeśli nie częścią modelu, z którego można korzystać ViewBag), zwróconym do widoku przez kontroler. – Joel

+1

** Sesje są złe **, szczególnie jeśli korzystasz z Cloud Hosting ... bądź świadomy! – balexandre

Odpowiedz

12

robisz to źle ...

Session[<item name>] Zwraca ciąg znaków, należy porównać z ciągiem, jak również, czy rzucić go tak, albo (int)Session["UserId"] == 10 lub Session["UserId"] = "10".

Wywołujesz także właściwość, która nie istnieje Session.UserId nie będzie istnieć, ponieważ Session jest podobna do NameValueCollection, wywołujesz ją przez żądanie jej nazwy przedmiotu.

na koniec, trzeba napisać

@if (Session["UserId"] == "10") { 
    Html.Partial("LoggedMenu"); 
} 

Mówisz swój uczą, więc chciałbym podkreślić 2 szybki rzeczy:

  • powinieneś skorzystać z ASP.NET Kurs MVC, który jest dostępny za darmo na stronie głównej http://asp.net/mvc (po prawej stronie, gdy czytasz "Essential Videos")
  • Utwórz projekt MVC3 i zobacz, jak to się robi, gdy będzie gotowy po wyjęciu z pudełka z członkostwem
+7

Wierzę, że 'Session []' zwraca obiekt, a nie ciąg znaków. –

2
@if (Session["UserId"] != null && Session["UserId"] == 10) { 
Html.Partial("LoggedMenu"); 
} 

Oprócz tego: do zarządzania tożsamością lepiej użyć po wyjęciu z pudełka membership system

1

Poniżej znajduje się przykład:

Kontroler:

if (Session["pageInitCounter"] == null) 
    { 
     Session["pageInitCounter"] = 1; 
    } 
    else 
    { 
     int counter = Convert.ToInt32(Session["pageInitCounter"]); 
     counter++; 
     Session["pageInitCounter"] = counter; 
    } 

Widok:

@Html.Hidden("pageInitCounter", Session["pageInitCounter"]) 

Javascript:

alert($("#pageInitCounter").val()); 
+0

Działa, ale dlaczego "@ Html.Hidden (" pageInitCounter ", Session [" pageInitCounter "])", czy możemy po prostu wywołać sesję bezpośrednio w alarmie? – 123iamking

+1

alert() to javascript po stronie klienta. Musisz napisać serwer ASP var na stronie javascript, aby móc się do niego odwoływać. Flea robi to, dzwoniąc do @ Html.Hidden Helper. – Hecatonchires

Powiązane problemy