首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Session有关问题又来了,点树有时不更新Session["data"]

2012-04-16 
Session问题又来了,点树有时不更新Session[data]这个问题只涉及到下面唯一的一个简单的页面,C#代码和asp

Session问题又来了,点树有时不更新Session["data"]
这个问题只涉及到下面唯一的一个简单的页面,C#代码和aspx代码全给出,为了说明问题,先画出我的树

学校各部门
L__教务处
L__德育处
L__后勤
L__工会
学年
L__高一
L__高二
L__高三

我每次一点树的结点会执行
Session["data"] = TreeView1.SelectedNode.ValuePath.ToString();
这时我再点树下方的一个按钮执行:
String data = Session["data"] as String;
Response.Write(data);
会正常显示出刚刚赋值的Session["data"]

如果我点“高一”后点按钮会显示“学年/高一”,
再点“高二”后点按钮会显示“学年/高二”,
这时再点“高一”后点按钮却不会显示“学年/高一”,而仍然是“学年/高二”
如果这时再点“高三”后点按钮,会显示“学年/高三”
总结一下就是,好像点过的按钮再点的话,不会更新Session["data"],只有点了没点过的,才会改变它

如何改正以上毛病让我能正常点“点过的按钮并赋给Session["data"]”?

C#代码部分:
略去using
public partial class a_a : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }
  protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
  {
  Session["data"] = TreeView1.SelectedNode.ValuePath.ToString();
  }
  protected void Button2_Click(object sender, EventArgs e)
  {
  String data = Session["data"] as String;
  Response.Write(data);
  }
}

网页代码部分:(您可能不需要看,里面就是一个树,我上面画了,和一个按钮)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree.aspx.cs" Inherits="a_a" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>无标题页</title>
<style type="text/css">

  .tree td div
  {
  height: 20px !important;
  }
  *
  {
  padding: 0;
  margin: 0;
  border: 0;
  }
</style>
</head>

<body>
  <form id="form1" runat="server">
  <asp:TreeView ID="TreeView1" runat="server" LineImagesFolder="TreeLineImages" 
  ShowLines="True" ImageSet="Simple" 
  onselectednodechanged="TreeView1_SelectedNodeChanged" CssClass="tree" 
  Target="ContentFrame">
  <ParentNodeStyle Font-Bold="False" />
  <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
  <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" 
  HorizontalPadding="0px" VerticalPadding="0px" />
  <Nodes>
  <asp:TreeNode Text="学校各部门" Value="学校各部门">
  <asp:TreeNode Text="教务处" Value="教务处"></asp:TreeNode>
  <asp:TreeNode Text="德育处" Value="德育处"></asp:TreeNode>
  <asp:TreeNode Text="后勤" Value="后勤"></asp:TreeNode>
  <asp:TreeNode Text="工会" Value="工会"></asp:TreeNode>
  </asp:TreeNode>
  <asp:TreeNode Text="学年" Value="学年">
  <asp:TreeNode Text="高一" Value="高一"></asp:TreeNode>
  <asp:TreeNode Text="高二" Value="高二"></asp:TreeNode>
  <asp:TreeNode Text="高三" Value="高三"></asp:TreeNode>
  </asp:TreeNode>


  </Nodes>
  <NodeStyle Font-Names="Tahoma" ForeColor="Black" 
  HorizontalPadding="0px" NodeSpacing="0px" VerticalPadding="0px" />
  </asp:TreeView>
  <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
  <p>
  <a href="HTMLPage.htm">HTMLPage.htm</a></p>
  <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" />
  </form>
  </body>
</html>

[解决办法]
应该不会出现你的说的现象啊,只要执行力TreeView1_SelectedNodeChanged就应当是改变了值
你的测试是在VS里面还是iis里面?
[解决办法]
你可以
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
Session["data"] = TreeView1.SelectedNode.ValuePath.ToString();
Response.Write("<h1 style='color:red'>执行了:" + Session["data"].ToString() + " ,点击按钮将显示 “" + Session["data"].ToString() + "”</h1>");
}

protected void Button2_Click(object sender, EventArgs e)
{
String data = Session["data"] as String;
Response.Write(data);
}
测试,看看红色的内容和点击的内容是否一致,

[解决办法]
其实,使用Session保存内容不是很好,Session容易丢失数据,你可以改成 HiddenField 
Session适合跨页面保存。


<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="测试" />


protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
HiddenField1.Value = TreeView1.SelectedNode.ValuePath;
}

protected void Button2_Click(object sender, EventArgs e)
{
String data = HiddenField1.Value;
Response.Write(data);
}
[解决办法]
hiddenField可以提交到另外的页面的,但仅限于form提交的方法
[解决办法]
你要是做练习,可以先这样,如果是做项目。做之前一定要选择好传值方法,否则,以后可能会出问题并需要重新改写代码的。
关于状态,你参考 ASP.NET 状态管理概述
http://msdn.microsoft.com/zh-cn/library/75x4ha6s.aspx
系列介绍教程

热点排行