我刚刚在一个ASPX页面上切换到使用CSS Adapters进行TreeView控件。现在,出于某种原因,我不能使用SelectedNode方法,除了我的OnClick()事件。所有其他事件显示SelectedNode为NULL。每当有人点击某个节点时,我目前正在使用一堆不可见的标签来存储树信息。使用此控件的非常非常非常错误的方法。启用CSS适配器后,在代码中获取控件的秘诀是什么?
答案 0 :(得分:1)
TreeView控件的适配器确实有一些视图状态处理,但是你在回发时所选节点属性为空。
如果将鼠标悬停在根节点上,浏览器上的状态栏将显示如下内容:
javascript:__doPostBack('controlid', 'eventargument');
//or
javascript:__doPostBack('tv', 'srootnodevalue\\childnodevalue');
您可以在后面的代码中捕获事件参数,该参数描述您正在访问的节点及其值为字符串,如'node \ value'。
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”来识别所选节点。
尽管如此,可能还有更好的方法......