树视图事件的客户端脚本

时间:2010-12-27 14:23:39

标签: asp.net

我有一个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中管理事件客户端,但我将无法再使用我的会话变量。有没有办法实现这个目标?

谢谢

1 个答案:

答案 0 :(得分:1)

我会在一定程度上回答自己。

我已经做了一些测试和研究,默认情况下EnableClientScript是真的,并且确实意味着扩展和折叠操作是由客户端处理的,由.Net框架自动生成的Javascript代码。你无法编辑它。

显然,如果您需要在用户展开或折叠阳极时添加自定义操作,您必须使用TreeNodeExpanded和TreeNodeCollapsed事件,就像我上面所做的那样,并且无法避免回发,因为它们是在服务器端触发的。