microsoft.web.ui.controls 的 treeview 控件绑定问题
工作笔记
工作记录
📅 2025-10-21 10:20
👤 admin
周五遇到一个问题,treeview控件绑定菜单数据,当菜单节点过少的时候,报错了。仔细查找了好久,找不到原因。只知道databind()就报错了。查看了报错日志,发现有Page.url报错,甚是奇怪。最后反编译了dll,找到了问题。问题在于下面这个方法:
控件的 ReadXmlSrc 先把 TreeNodeSrc 当作 URI 去读取(GetXmlReaderFromUri);只有当该 URI 读取抛异常时才回退到把字符串当 XML(GetXmlReaderFromString)。
当节点较少时,编码后的相对 URI 比较短,请求成功返回了内容(或服务器对短 URL 做了特殊处理),解析器就直接在那个输入流上解析并在 DTD/属性处报错 —— 因为那不是一个纯净的 XML 输入(被当作 URL 处理后产生了问题)。
当节点很多时,编码后的 URL 变得更长或触发服务器拒绝/超时等错误,导致 GetXmlReaderFromUri 抛出异常,代码走到 catch 分支再用字符串解析,这样就不会触发 URI 路径上的那类错误,所以看起来“节点多反而不报错”。微软的控件真是一言难尽
相关笔记