下面的代码,如果注释掉红色的行,兰色的行就有效
如果不注释掉红色的行,兰色的就失效(不显示Session["data"])
红色作用,给树的每个结果初始化上NavigateUrl,以便让我一点结果就到对应网页
兰色作用,上面的保存所点结点的Valuepath于Session["data"],下面的显示出Session["data"]值,我的Session["data"]用于在本页和其它页引用,为简化,帖出的代码是在本页引用
红兰的两功能我想同时要,但是他们却不想共存
问:如何让他们共存?改动越少越好。
public partial class a_a : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GetAllNodeText(TreeView1.Nodes);
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
Session["data"] = TreeView1.SelectedNode.ValuePath.ToString();
}
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach (TreeNode node in tnc)
{
if (node.ChildNodes.Count != 0)
GetAllNodeText(node.ChildNodes);
Response.Write(node.Text + " ");
node.NavigateUrl = "TopicList.aspx?Department=" + node.ValuePath;
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
String data = Session["data"] as String;
Response.Write(data);
}
}
------解决方案--------------------------------------------------------
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
GetAllNodeText(TreeView1.Nodes);
}
}
------解决方案--------------------------------------------------------
仅在用户单击节点时的回发中才激发 SelectedNodeChanged 事件。
你使用NavigateUrl,点击就转到NavigateUrl的地址了,是不会触发 SelectedNodeChanged 事件d
你传参数,添加到NavigateUrl后面就可以了
参见
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.treenode.navigateurl.aspx
里面的备注部分
------解决方案--------------------------------------------------------
你可以去掉NavigateUrl
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
Session["data"] = TreeView1.SelectedNode.ValuePath;
Response.Redirect("~/TopicList.aspx?Department=" + Server.UrlEncode( TreeView1.SelectedNode.ValuePath));
}
------解决方案--------------------------------------------------------
那你可以改成
- C# code
Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","window.top.frames['Contentframe'].location.href='" + Page.ResolveUrl("~/") + "TopicList.aspx?Department=" + Server.UrlEncode( TreeView1.SelectedNode.ValuePath)+ "'",true);