Load On Demand Expand on Server-side NodeClick
Case:
A Load On Demand TreeView for which:
The ExpandMode for Load On Demand Nodes is either ServerSideCallBack or WebService.
The NodeClick server-side event is handled.
A Node is expanded when clicked (in either the OnClientNodeClicking or OnClientNodeClicked event handlers).
Problem:
Due to timing issues in case ExpandMode for the clicked Node is:
ServerSideCallBack - the Node does not expand after the postback although its child Nodes are loaded.
WebService - the Web Method fails.
Resolution:
Ensure that the NodeClick event fires after the Node finishes loading its Nodes:
-
Expand the Node in the OnClientNodeClicking event handler. If the Node's ExpandMode is ServerSideCallBack or WebService and the Node does not have children, cancel the event. Below is an example:
function onClientNodeClicking(sender, eventArgs){ var node = eventArgs.get_node(); if ((node.get_expandMode() > 1) && (node.get_nodes().get_count() == 0)) { eventArgs.set_cancel(true); } node.expand(); }
-
Handle the OnClientNodePopulated event and select the expanded Node in the event handler, like this:
function onClientNodePopulated(sender, eventArgs){ eventArgs.get_node().select(); }