2010-05-05 13 views
5

Ho bisogno di inizializzare un valore in un Javascript utilizzando un letterale C# che faccia riferimento a una variabile di sessione. Sto usando il seguente codiceInizializzazione di un valore tramite una variabile Session

<script type="text/javascript" language="javascript" > 
    var myIndex = <%= !((Session["myIndex"]).Equals(null)||(Session["myIndex"]).Equals("")) ? Session["backgroundIndex"] : "1" %>; 

Tuttavia, il codice di cui sopra mi sta dando un classico errore di Object reference not set to an instance of an object.. Perché? Non dovrebbe (Session["myIndex"]).Equals(null) catturare questo particolare errore?

+2

Session [ "MyIndex"] restituisce nulla, e nulla non dispone di una funzione di .equals(). È necessario confrontare con ==, in quanto non è una funzione che richiede un oggetto da cui derivare. – Corey

risposta

0

Questo lavoro (ho provato!):

var myIndex = <%=!string.IsNullOrEmpty((string)Session["myIndex"]) ? Session["myIndex"] : "1" %> ; 
1

Sei sicuro che Session["myIndex"] non è nullo?

È necessario aggiungere un altro cortocircuito O controllare (Session["myIndex"] == null) e liberarsi di (Session["myIndex"]).Equals(null).

1

errore di riferimento oggetto può essere perché (Session [ "MyIndex"]) è nullo,

(Session [ "MyIndex"]). Uguale è usato per confrontare il valore in modo da poter utilizzare lo si desidera confrontare come (Sessione ["myIndex"]). Uguale ("yourIndex")

-3

nel codice sottostante creare una variabile protetta e inizializzarla lì. Il principale vantaggio è che puoi eseguire il debug qui. E in più puoi usare try catch.

code-behind

protected string sessionValue; 
private void Page_Load(...) 
{ 
try 
{ 
sessionValue = Session["key"].ToString(); 
} 
catch 
{ 
sessionValue = [defaultValue]; 
} 
} 

javascript:

<script> 
var sessionValue = "<%= sessionValue %>"; 
</script> 

In questo modo si può evitare l'incidente e fare qualcos'altro se il sessionValue è nullo o ha un defaultValue.

+2

-1 Non utilizzerei try/catch come sostituto di un semplice * if (Session ["key"] == null) * check .... spero che non usi troppo spesso quel metodo? – slugster

+0

l'idea alla base del try catch è che puoi evitare un crash, con se ogni volta che la sessione scade, avrai un crash. Anche se non sono così esperto, credo che questo sia il modo più sicuro per farlo. Se è possibile evitare un arresto anomalo eseguendo un controllo semplice, è possibile, ma se c'è la minima possibilità che l'applicazione possa bloccarsi suggerisco di provare la versione più sicura. – GxG

+2

No, la pagina non si arresterà in modo anomalo se la sessione scade - ottieni semplicemente una nuova sessione senza nulla in essa. Attenersi al controllo * if null * e non assumere mai il presupposto che il proprio articolo sia stato posizionato correttamente in Session. – slugster

3

Il problema è che null non è un oggetto e il metodo Equals() può essere utilizzato solo sugli oggetti. Se si desidera verificare se l'oggetto Session è nullo, è necessario utilizzare (Session["myIndex"] == null). È inoltre possibile utilizzare string.IsNullOrEmpty() per un controllo aggiuntivo sulle stringhe vuote. In questo caso, il codice dovrebbe essere:

var myIndex = <%= !string.IsNullOrEmpty((string)Session["myIndex"]) ? Session["backgroundIndex"] : "1" %>; 

Nota: non Session["backgroundIndex"] dovrebbe essere Session["myIndex"] in questo caso? Altrimenti la verifica delle stringhe nulle o vuote è un po 'inutile secondo me.

+0

-1 anche per te ... non puoi semplicemente fare un * string.IsNullOrEmpty (Session ["myIndex"]) * - non verrà nemmeno compilato come * Session [key] * restituisce un oggetto, non una stringa. La tua spiegazione è stata buona però. – slugster

+0

@slugster: dal contesto dell'esempio, è chiaro che 'Session [" myIndex "]' è una stringa. Se si tratta di un oggetto diverso, allora puoi anche far scattare l'eccezione, perché non te l'aspetti. Inoltre, il campione fornito non controlla nemmeno le stringhe. – Prutswonder

+0

Concordo sul fatto che l'esempio non controlli (o scriva su) stringhe. Non importa ciò che è contenuto in quel particolare indice, viene restituito come tipo * oggetto *. Al momento in cui ho downvoted c'erano 4 risposte, la tua era la migliore ma con errori sintattici. Se modifichi il post, invertirò il mio downvote. – slugster

Problemi correlati