当 id 为字符串时,jstree disable_node 不起作用

问题描述

我想禁用 jstree 插件中的一些节点。我为此使用了以下代码,一切都很好。

var tidlist = ['17f6171a-4da6-4904-ae75-c290eb101717','3fbb9e60-13f2-48e9-9323-003cb46dbb5d'];
for (var i = 0; i < tidlist.length; i++)
{
    $.jstree.reference('#jstree1').disable_node(tidlist[i]);
}

在本例中,ID 被定义为固定的。但是 ID 不是固定的,而是来自控制器。

控制器

ViewBag.rlist = JsonConvert.SerializeObject(tQuery.Select(t => t.CenterUserID).ToList());

查看

var tidlist = [];
tidlist = '@ViewBag.rlist';
for (var i = 0; i < tidlist.length; i++)
{
    $.jstree.reference('#jstree1').disable_node(tidlist[i]);
}

但是这段代码不起作用。

解决方法

尝试通过 F12 开发者工具设置调试 JavaScript 的断点,然后,您可以看到 org.springframework.web.util.UriUtils#encodePath 值应该是 tidlist1[System.String];`,而不是字符串数组。

问题是我们无法直接访问 JavaScript 中的 ViewBag 值。

要将字符串数组从控制器传输到 JavaScript 脚本,首先,在控制器中,将数组或列表转换为字符串(带分隔符),然后,在视图页面中,使用隐藏字段来存储 ViewBag 值,最后,在 JavaScript 脚本中,从隐藏字段中获取值并调用 Split() 方法将字符串值转换为数组。

代码如下:

控制器:

System.Collections.Generic.List

查看页面:

var strlist = new List<string>() { "17f6171a-4da6-4904-ae75-c290eb101717","3fbb9e60-13f2-48e9-9323-003cb46dbb5d" }; 
ViewBag.rlist = string.Join(',',strlist);

结果如下:

enter image description here