Адаптер для элемента управления TreeView имеет некоторую обработку состояния представления, но вы правы, свойство выбранного узла при обратной передаче равно нулю.
Если вы наведите курсор мыши на корневой узел, строка состояния в браузере покажет что-то вроде:
javascript:__doPostBack('controlid', 'eventargument');
//or
javascript:__doPostBack('tv', 'srootnodevalue\\childnodevalue');
Вы можете поймать аргумент события в коде, который описывает узел, к которому вы обращаетесь, и его значение в виде строки типа «узел \ значение».
if (Request.Form["__EVENTTARGET"] != null && Request.Form["__EVENTARGUMENT"] != null)
{
if (Request.Form["__EVENTTARGET"].Equals("tv")) //tv is my treeview control id, and the first parameter in __doPostBack()
Tv_SelectedNodeChanged(Request.Form["__EVENTARGUMENT"]);
}
protected void Tv_SelectedNodeChanged(string argument)
{
//process the argument string 'srootnodevalue\childnodevalue'
}
Представление древовидной структуры, кажется, знает о выбранном узле посредством представления его адаптером как class = "AspNet-TreeView-Leaf AspNet-TreeView-Selected", когда он выполняет визуализацию.
Тем не менее, может быть лучший способ сделать это ...