[英]Disabling ASP.net treeview checkboxes
你们如何有条件地禁用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 = "<span class=disabledTreeviewNode>" + newNode.Text +"</span>";
}
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将会出错
<span></span>
在他们中。 你得到一个空引用
if (textSpan.firstChild)
并且不处理后续节点。
我通过向所有我不想禁用的树节点添加带有class = enabledTreeviewNode的span来解决这个问题。
我猜你也可以在JavaScript中处理异常。
希望这有助于后来偶然发现这个(非常好的)解决方案的人。
OP正在寻找条件禁用,但我只想使用TreeView来显示历史审计数据,以及项目何时开启的日志。 应禁用我页面上的所有复选框。 我花了一些时间来找到这个优雅的jQuery解决方案。 我希望它可以帮助任何有类似问题的人。
将以下代码添加到脚本部分。 由于所有输入框都将被禁用,因此无需对代码隐藏进行任何更改。
<script type="text/javascript">
$(document).ready(function () {
$("input:checkbox").each(function () {
$(this).prop('disabled', true);
});
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.