2011-08-06 107 views
7

he el siguiente código, que utiliza la sesión, pero tengo un error en la línea:'Sesión' no existe en el contexto actual

if (Session["ShoppingCart"] == null) 

el error es cS0103: The name 'Session' does not exist in the current context ¿cuál es el problema?

using System; 
using System.Data; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

using System.Collections.Generic; 
using System.Web.SessionState; 
/// <summary> 
/// Summary description for ShoppingCart 
/// </summary> 
public class ShoppingCart 
{ 
    List<CartItem> list; 
    public ShoppingCart() 
    { 
     if (Session["ShoppingCart"] == null) 
      list = new List<CartItem>(); 
     else 
      list = (List<CartItem>)Session["ShoppingCart"]; 
    } 
} 
+0

qué método? ¿te refieres a un constructor? en otra clase – Adham

+1

Usted lo llama desde una página que no es sesión, o desde un hilo. – Aristos

Respuesta

15

El problema es que su clase no hereda de Page.
Cambio clase pública ShoppingCart

a ShoppingCart clase pública: Página

y funcionará

+4

Heredar página cuando no es una página no parece una solución adecuada ... – Peter

34

Uso

if (HttpContext.Current == null || 
    HttpContext.Current.Session == null || 
    HttpContext.Current.Session["ShoppingCart"] == null) 

en lugar de

if (Session["ShoppingCart"] == null) 
+2

Pero obtengo esta excepción System.NullReferenceException .. !! – Adham

+0

¿Has abandonado la sesión o algo así? mi suposición es que HttpContext.Current es nulo o HttpContext.Current.Session es nulo ... pero no tengo idea de por qué con tan poca información – Peter

+0

esta HttpContext.Current.Session ["ShoppingCart"] fue genial. gracias :) – Umitk

7

o hay que hacer convierta su clase a Page heredando de Page, o haga pasar el Session, o use HttpContext.Current.Session.

+2

Pero obtengo esta excepción System.NullReferenceException .. !! – Adham

+0

Heredar página cuando no es una página no parece una solución adecuada ... – Peter

0

Salam.

En mi caso, sólo try-catch problema del arreglo de bloques, así:

protected void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     /// Using from Try-Catch to handle "Session state is not available in this context." error. 
     try 
     { 
      //must incorporate error handling because this applies to a much wider range of pages 
      //let the system do the fallback to invariant 
      if (Session["_culture"] != null) 
      { 
       System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(Session["_culture"].ToString()); 
       //it's safer to make sure you are feeding it a specific culture and avoid exceptions 
       System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Session["_culture"].ToString()); 
      } 
     } 
     catch (Exception ex) 
     {} 
    } 
0

Creación de una nueva página y pegar todo lo que contiene, desde una página rota, no funcionó. Lo que funcionó fue cerrar Visual Studio y volver a abrirlo. página rota trabajó, después

0

Si desea utilizar la sesión directamente a continuación, sólo basta con añadir siguiente espacio de nombres

using system.web.mvc

Cuestiones relacionadas