Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用ASP.net树视图复选框_C#_Javascript_Asp.net_Checkbox_Treeview - Fatal编程技术网

C# 禁用ASP.net树视图复选框

C# 禁用ASP.net树视图复选框,c#,javascript,asp.net,checkbox,treeview,C#,Javascript,Asp.net,Checkbox,Treeview,你们如何有条件地禁用asp树视图中的复选框 例如,如果应用程序用户没有特定权限,请在权限树视图中禁用该权限条目复选框 这是我要找的,这是winform应用程序中的等效项(文本灰显时复选框被禁用): 我看到了其他解决方案,其中复选框上的单击事件被截获并忽略。我更喜欢将复选框设置为禁用的解决方案 我正在寻找一个C#解决方案,但我很乐意使用C#/Javascript解决方案 谢谢 您可以使用安全微调来不显示用户无权访问的项目。我不知道有什么方法可以让项目显示但不活动。在客户端禁用复选框只会造成安全漏

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

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

这是我要找的,这是winform应用程序中的等效项(文本灰显时复选框被禁用):

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

我正在寻找一个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 = "<span class=disabledTreeviewNode>" + newNode.Text +"</span>";
    }

nodes.Add (newNode);
treenodenewnode=newtreenode(permission.ToString());
newNode.SelectAction=TreeNodeAction.None;//无链接
如果(应禁用复选框)
{
//设置一个类,使禁用的节点可以通过CSS格式化
//并且可以在Javascript中识别为已禁用。
newNode.Text=“”+newNode.Text+”;
}
nodes.Add(newNode);
在Javascript中,扫描所有treeview节点以查找具有该类名的节点,并禁用与其关联的复选框:

    // 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];
}
//通过在代码隐藏中创建的启动脚本调用。
//禁用包含class=disabledTreeviewNode文本的所有treeview复选框。
//treeView是treeView的客户端ID
功能禁用复选框(TreeView)
{
TREEVIEW_ID=treeviewID;
var treeView=document.getElementById(treeView\u ID);
如果(树视图)
{
var childcheckbox=treeView.getElementsByTagName(“输入”);
对于(变量i=0;i
遗憾的是,我没有足够的声誉来直接评论祖坎塔的答案,这有点痛苦,但我不得不在javascript中进行修改,以使这一点起作用:

if (textSpan.firstChild)
                if (textSpan.className == "disabledTreeviewNode")
                    childCheckBoxes[i].disabled = true;
i、 e.将textSpan.firstChild.ClassName替换为textSpan.ClassName

还值得指出的是,除非您正在寻址的树视图中的所有树节点都具有

<span></span> 
并且不处理后续节点

我通过向所有不希望禁用的树节点添加class=enabledTreeviewNode的span来绕过这一点

我想,您也可以在JavaScript中处理异常


希望这能帮助后来偶然发现这个(其他方面非常好的)解决方案的人。

OP正在寻找条件禁用,但我只想使用TreeView显示历史审核数据,以及项目打开时的日志。 我的页面上的所有复选框都应该被禁用。我花了一些时间找到这个优雅的jQuery解决方案。我希望它能帮助任何有类似问题的人

将下面的代码添加到脚本部分。由于所有输入框都将被禁用,因此根本不需要对代码隐藏进行任何更改


$(文档).ready(函数(){
$(“输入:复选框”)。每个(函数(){
$(this.prop('disabled',true);
});
});

谢谢DaveB,但权限树视图只是一个例子。我只是想在asp.net树状视图中,在某些条件下将一些复选框设置为“禁用”。我还需要显示那些树视图节点,但只需将它们设置为禁用。所以,安全性调整似乎是一个牵强的解决方案,但无论如何还是要感谢。这很有效,但我遇到了一个非常奇怪的问题。我的treeview在回发时没有改变,但我必须运行这个JS 2x才能应用它,除非我在第一次调用时将您的
if(textSpan.firstChild.className==“disabledTreeviewNode”)
行更改为
if(textSpan.className==“disabledTreeviewNode”| textSpan.firstChild.className==“disabledTreeviewNode”)
textSpan.className==“disabledTreeviewNode”
true
并且后续调用您的代码在
textSpan.firstChild.className==“disabledTreeviewNode”
中起作用。不是100%确定我是否理解,但是检查这两个条件使这项工作起作用。作为后续,请看我写的这篇文章,它用大约3行
jQuery
:如果您使用的是UpdatePanel,请将DisableCheckBox函数绑定到
$(文档).ready
jQuery事件和postback-end事件,并清除讨厌的服务器端代码。
if (textSpan.firstChild)