我有一个Treeview,其中“populateOnDemand”设置为true。我希望这个树视图将其状态(节点展开/折叠)从一个页面保持到另一个页面。 Viewstate不起作用,因为每个页面的树视图都不同。这是我目前的代码。
ASPX页面:
<asp:TreeView
ID="arbre"
EnableViewState="true"
PopulateNodesFromClient="true"
runat="server" />
代码背后:
Protected Sub arbre_TreeNodeCollapsed(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles arbre.TreeNodeCollapsed
CType(Session("listeNoeudsOuverts"), Hashtable)(e.Node.Value) = True
End Sub
Protected Sub arbre_TreeNodeExpanded(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles arbre.TreeNodeExpanded
CType(Session("listeNoeudsOuverts"), Hashtable)(e.Node.Value) = False
End Sub
Protected Sub arbre_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles arbre.TreeNodePopulate
// code to populate nodes
CType(Session("listeNoeudsOuverts"), Hashtable)(e.Node.Value) = True
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Session("listeNoeudsOuverts") Is Nothing Then
Session("listeNoeudsOuverts") = New Hashtable()
End If
// other stuff
End Sub
这很好用,我希望每次用户扩展或折叠节点时都可以避免回发。我知道我可以将EnebleClientScript设置为true并在Javascript中管理事件客户端,但我将无法再使用我的会话变量。有没有办法实现这个目标?
谢谢
答案 0 :(得分:1)
我会在一定程度上回答自己。
我已经做了一些测试和研究,默认情况下EnableClientScript是真的,并且确实意味着扩展和折叠操作是由客户端处理的,由.Net框架自动生成的Javascript代码。你无法编辑它。
显然,如果您需要在用户展开或折叠阳极时添加自定义操作,您必须使用TreeNodeExpanded和TreeNodeCollapsed事件,就像我上面所做的那样,并且无法避免回发,因为它们是在服务器端触发的。