将会话ID存储为字符串并将其强制转换回GUID

时间:2010-07-19 14:25:55

标签: c# asp.net session

我正在尝试使用session来存储值(id)。问题是我必须将其存储为字符串。当尝试使用id的实例时,我得到错误:

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:    

这是我获得id的地方,似乎工作正常。 Session [“id”]获取值。

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();
     }

但是这段代码似乎不起作用。我得到了上面提到的错误。

protected void Button1_Click(object sender, EventArgs e)
    {


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

4 个答案:

答案 0 :(得分:4)

使用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 :(得分:3)

尝试使用:

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

答案 2 :(得分:0)

您将GUID转换为字符串,然后将其保存在会话集合中。但是当你检索它时,你试图将它转换为无效的GUID。字符串和GUID是不兼容的类型。保存并使用GUID构造函数将字符串转换为GUID实例时,将其保存为GUID或将其转换为字符串(就像您正在做的那样)。

你可以这样做:

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

然后从会话中检索它:

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

答案 3 :(得分:0)

默认情况下,aspx创建的SessionID不是GUID。您可以创建自己的数据类型会话ID值。例如:

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