2013-06-08 20 views
8

Ho scritto molti siti Web con PHP. Ora, devo creare un sito Web con ASP MVC 4 (C#) e sono bloccato con Sessioni.Recupera variabili di sessione in ASP.NET MVC 4 (rasoio, vista)

I.E. l'utente dovrebbe andare alla pagina di accesso, inserire il suo/la sua login e password. Se sono corretti, nel controllore, ho impostato la sessione con UserId, in questo modo:

Session["UserId"] = 10 

Questo valore UserId viene utilizzato per mostrare PartialViews (modulo di accesso o (dopo il login) alcuni menu delle applicazioni). Come posso ottenere questo UserId all'interno della visualizzazione Razor?

Dopo questo in Vista:

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

Ho eccezione con StackOverflow. :/

+0

si può aggiungere un ASP o tag simile favore? –

+0

Sembra in questo scenario che non dovresti usare la sessione. UserId dovrebbe essere parte del modello (o se non fa parte del modello che è possibile utilizzare ViewBag) restituito alla vista dal controller. – Joel

+1

** Le sessioni sono malvagie **, specialmente se stai usando Cloud Hosting ... attenzione! – balexandre

risposta

12

che stai facendo è sbagliato ...

Session[<item name>] restituisce una stringa, si deve confrontare con una stringa così, o lanciare, quindi, sia (int)Session["UserId"] == 10 o Session["UserId"] = "10".

si sta anche invocando una proprietà che non esiste Session.UserId non esiste come Session è come un NameValueCollection, lo si chiama per richiesta è il nome dell'oggetto.

alla fine, si dovrebbe scrivere

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

Tu dici la tua stanno imparando, quindi mi piacerebbe sottolineare 2 cose veloci:

  • si dovrebbe approfittare del ASP.NET Corso MVC disponibile gratuitamente nella home page http://asp.net/mvc (lato destro quando si legge "Video essenziali")
  • Creare un progetto MVC3 e vedere come lo fanno appena viene fornito pronto all'uso con l'abbonamento
+7

Credo che 'Session []' restituisca un oggetto non una stringa. –

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

A parte questo: per la gestione delle identità meglio utilizzare il fuori dalla scatola membership system

1

Di seguito è riportato un esempio:

Controller:

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

Vista:

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

Javascript:

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

Funziona, ma perché "@ Html.Hidden (" pageInitCounter ", Session [" pageInitCounter "])", possiamo semplicemente chiamare la Sessione direttamente in allerta? L'avviso – 123iamking

+1

() è javascript lato client. È necessario scrivere il var server asp alla pagina per javascript per poterlo fare riferimento. Flea lo fa chiamando l'helper @ Html.Hidden. – Hecatonchires

Problemi correlati