问题描述
我想禁用 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
值应该是 tidlist
1[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);
结果如下: