2012-05-21 9 views
5

Estoy comparando la variable de sesión con una cadena para verificar si el tipo de inicio de sesión es administrador o no.comparando el valor de la variable de sesión con una cadena

Código

estoy usando:

if (Session["loggedInUsername"] == null) 
     { 
      btnLogin.Text = "Sign In"; 
      lblWelcome.Text = "Welcome!"; 
      hypManageRestaurants.Enabled = false; 
      hypManageReviews.Enabled = false; 
      hypPostReviews.Enabled = false; 

     } 
     else 
     { 
      if (Session["loggedInUserType"] == "Administrator") 
      { 
       hypManageRestaurants.Enabled = true; 
       hypManageReviews.Enabled = true; 
       hypPostReviews.Enabled = true; 
      } 
      else 
      { 
       hypManageRestaurants.Enabled = false; 
       hypManageReviews.Enabled = false; 
       hypPostReviews.Enabled = true; 
      } 
      lblWelcome.Text = "Welcome " + Session["loggedInUsername"]; 

      btnLogin.Text = "Sign Out"; 
     } 

Así que primero estoy comprobando si algún usuario ha iniciado sesión o no. Si el usuario inicia sesión con éxito, la variable de sesión "loggedInUsername" tendrá el valor del nombre de usuario. Si la variable de sesión "loggedInUsername" no está vacía, verificará la variable de sesión "loggedInUserType" para el tipo de usuario conectado.

Aquí viene lo raro, el valor de "loggedInUserType" es exactamente "Administrador" sin el "", en la función if donde estoy comparando la variable de sesión con la cadena "Administrator" se está omitiendo y va a el otro

Todas las variables de sesión son cada vez más valores cuando el usuario inicia sesión.

A continuación se muestra los datos que estoy usando para iniciar sesión y este disco es el único registro que tienen un tipo de "administrador".

link to image

¿Hay algún otro método para comparar una variable de sesión a una cadena

+0

¿Qué quiere decir que está siendo omitidos? ¿Va a la declaración else? Es probable que sea un problema de casting. Pruebe Object.ReferenceEquals (a, b) o "Administrator" .Equals (Session ["..."]) –

+1

Utilice un [Membership provider] (http://msdn.microsoft.com/en-us/library/ yh26yfzy.aspx) en su lugar. –

Respuesta

3

emitir el valor de tipo de objeto a una cadena

((string)Session["loggedInUserType"]) == "Administrator" 
+0

Sí, fundir con cuerdas trabajadas, gracias – drinu16

1

Prueba esto:

if (Session["loggedInUserType"].ToString().Trim() 
     .Equals("Administrator", StringComparison.InvariantCultureIgnoreCase)) 
4

Trate

if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) ...

+0

Este método también funciona :) pero no sé si puedo marcar 2 respuestas xD – drinu16

0

¿Estas seguro que todo el espacio en blanco ha sido tr immed desde el final de la sesión ["loggedInUserType"]?

0
if (Session["loggedInUserType"].ToString() == "Administrator") 
0

La colección Session devuelve valores de tipo Object, así que cuando lo comparamos con una cadena se le comparando los valores de las referencias a objetos, no comparando los valores de cadena.

moldeada la referencia del objeto a string:

if (((string)Session["loggedInUserType"]) == "Administrator") 
0

Usted puede hacer esto:

string session = (string)Session["loggedInUserType"] 

if (session == "Administrator") 

o su Session puede estar en una clase específica con captadores.

0
if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) 

De esta manera, no hay necesidad de comprobar el valor nulo becuase Convert.ToString manejar valor de retorno "nulo" cadena vacía

Cuestiones relacionadas