2010-12-27 3 views
0

У меня есть Treeview с "populateOnDemand" установлен в true. Я хочу, чтобы это древовидное представление сохраняло свое состояние (узлы, развернутые/свернутые) с одной страницы на другую. Viewstate не работает, потому что дерево для разных страниц отличается. Вот мой код на данный момент.сценарий клиентской стороны для событий treeview

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

Я отвечу себе в определенной степени.

Я выполнил некоторые тесты и исследования, по умолчанию EnableClientScript является истинным, и действительно означает, что операции расширения и свертывания обрабатываются на стороне клиента, с помощью кода Javascript, который является automaticalt, сгенерированным инфраструктурой .NET. Вы не можете редактировать его.

По-видимому, если вам нужно добавить пользовательские действия, когда пользователь расширяет или сворачивает анод, вы должны использовать события TreeNodeExpanded и TreeNodeCollapsed, как я сделал выше, и не могу избежать обратных передач, потому что они запускаются на стороне сервера.

Смежные вопросы