禁用ASP.net树视图复选框

你们如何有条件地禁用asp树视图中的复选框?

例如,如果应用程序用户没有特定权限,请在权限树视图中禁用该权限条目复选框。

这是我正在寻找的,这是winform应用程序中的等价物(禁用复选框,文本显示为灰色):

在此处输入图像描述

我看到了其他解决方案,其中复选框上的click事件被截获并被忽略。 我更喜欢一个解决方案,其中复选框只是设置为禁用。

我正在寻找一个C#解决方案,但会对C#/ Javascript解决方案感到满意。

谢谢!

好的,找到了一个相当干净的解决方案:

在代码隐藏中:

TreeNode newNode = new TreeNode(permission.ToString()); newNode.SelectAction = TreeNodeSelectAction.None; // no Link if (shouldDisableCheckbox) { // Set a class so disabled nodes can be formatted thru CSS // and be identifiable as disabled in Javascript. newNode.Text = "" + newNode.Text +""; } nodes.Add (newNode); 

在Javascript中,扫描所有树视图节点以查找具有该className的节点,并禁用与其关联的复选框:

  // Called via a startup script created in Code Behind. // Disables all treeview checkboxes that have a text with a class=disabledTreeviewNode. // treeviewID is the ClientID of the treeView function DisableCheckBoxes(treeviewID) { TREEVIEW_ID = treeviewID; var treeView = document.getElementById(TREEVIEW_ID); if (treeView) { var childCheckBoxes = treeView.getElementsByTagName("input"); for (var i = 0; i < childCheckBoxes.length; i++) { var textSpan = GetCheckBoxTextSpan(childCheckBoxes[i]); if (textSpan.firstChild) if (textSpan.firstChild.className == "disabledTreeviewNode") childCheckBoxes[i].disabled = true; } } } function GetCheckBoxTextSpan(checkBox) { // Set label text to node name var parentDiv = checkBox.parentNode; var nodeSpan = parentDiv.getElementsByTagName("span"); return nodeSpan[0]; } 

可悲的是,我没有足够的声誉能够直接评论zukanta的答案,这有点痛苦,但我不得不在javascript中进行修改以使其工作:

 if (textSpan.firstChild) if (textSpan.className == "disabledTreeviewNode") childCheckBoxes[i].disabled = true; 

即用textSpan.ClassName替换textSpan.firstChild.ClassName

另外值得指出的是,除非您正在寻址的树视图中的所有树节点都有一个,否则JavaScript将会出错

  

在他们中。 你得到一个空引用

 if (textSpan.firstChild) 

并且不处理后续节点。

我通过向所有我不想禁用的树节点添加带有class = enabledTreeviewNode的span来解决这个问题。

我猜你也可以在JavaScript中处理exception。

希望这可以帮助那些偶然发现这个(非常好的)解决方案的人。

您可以使用安全修整来显示用户无权访问的项目。 我不知道有任何方式显示项目但不活动。 禁用客户端复选框只会产生安全漏洞。

演练:根据安全角色过滤站点地图节点

ASP.NET站点地图安全修整