2010-07-19 3 views
2

J'essaie d'utiliser session pour stocker une valeur (id). Le problème est que je dois le stocker comme une chaîne. Lorsque vous essayez d'utiliser l'instance de l'id je reçois l'erreur:stocker l'ID de session sous forme de chaîne et le renvoyer au GUID

Exception Details: System.InvalidCastException: Specified cast is not valid. 

Source Error: 

Line 156:   
Line 157:  Nemanet_Navigation newFile = new Nemanet_Navigation(); 
Line 158:  newFile.Nav_pID = (Guid)Session["id"]; 
Line 159:  
Line 160:  

C'est là que je l'ai id et qui semble fonctionner très bien. Session ["id"] obtient la valeur.

public void treeview_Navigation_SelectedNodeChanged(object sender, EventArgs e) 
    { 

     TreeNode node = treeview_Navigation.FindNode(treeview_Navigation.SelectedNode.ValuePath); 
     NavTreeNode nNode = node as NavTreeNode; 
     Session["id"]=((TreeView)sender).SelectedValue.ToString(); 
    } 

Mais ce code ne semble pas fonctionner. Je reçois l'erreur mentionnée ci-dessus.

protected void Button1_Click(object sender, EventArgs e) 
    { 


     Nemanet_Navigation newFile = new Nemanet_Navigation(); 
     newFile.Nav_pID = (Guid)Session["id"]; 
     } 
+6

Pourquoi devez-vous le stocker en tant que chaîne? Pourquoi pas juste comme valeur GUID? – Guffa

+0

@Guffa: une question * très * excellente. Il n'y a généralement pas de bonne raison de le faire. – Randolpho

Répondre

4

Utilisez Guid.Parse

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Nemanet_Navigation newFile = new Nemanet_Navigation(); 
    newFile.Nav_pID = Guid.Parse(Session["id"] as string); 
} 
+1

Vous aurez besoin de lancer 'Session [" id "]' dans un 'string' avant de pouvoir le passer à la méthode' Parse'. – LukeH

+0

@LukeH: bon point. Correction – Randolpho

3

Essayez d'utiliser:

newFile.Nav_pID = new Guid(Session["id"].ToString()); 
+0

merci cela fonctionne :) – user390414

0

Vous transformez GUID à la chaîne avant de l'enregistrer dans la collecte de la session. Mais lorsque vous le récupérez, vous essayez de le convertir en GUID qui n'est pas valide. String et GUID ne sont pas des types compatibles. Enregistrez-le en tant que GUID ou convertissez-le en chaîne (comme vous le faites) lors de l'enregistrement et utilisez le constructeur GUID qui prend la chaîne pour reformer l'instance GUID.

Vous pouvez le faire comme ceci:

Session["id"]=((TreeView)sender).SelectedValue.ToString(); 

puis récupérer de la session comme:

newFile.Nav_pID = new Guid((string)Session["id"]); 
0

Par défaut, le SessionID créé soit par ASPX est pas un GUID. Vous pouvez créer votre propre valeur d'ID de session de type de données. par exemple:

HttpCookie myCookie = new HttpCookie("UserSettings"); 
    myCookie.Expires = DateTime.Now.AddMinutes(1.0); 
    myCookie.Value = g1.ToString(); 
Questions connexes