为 jstree 中的复选框设置初始状态

set initial state for checkboxes in jstree

我目前正在制作一个 C# MVC 应用程序,其中我使用 jsTree 作为 UI 元素之一。我在 jsTree 中使用复选框。我已经可以检索所有选定的值并将它们传递给我的控制器以使其执行其操作,这没问题。

但是我在加载网页时无法填充 jsTree。目前我有这个代码:

        @foreach (var obj in listServers)
        {
            <li id="root_@obj.DBServerID">
                @obj.DBServerName
                <ul>
                    @{
                        System.Data.DataSet myDS = Model.findDataBasesByServerID(obj.DBServerID);
                        foreach (System.Data.DataRow row in myDS.Tables[0].Rows)
                        {

                                if (dbRepos.isThisDatabaseSelectedForThisUser(Model.LoginID, obj.DBServerID, nameOfDB) == true) //true -> user has selected this earlier and needs to be selected
                                {
                                    <li class="jstree-clicked get_checked" id="@(obj.DBServerID)_@nameOfDB">@nameOfDB </li>
                                }
                                else //false -> user hasn't selected this earlier. Make a normal, unchecked checkbox
                                {
                                    <li id="@(obj.DBServerID)_@nameOfDB">@nameOfDB </li>
                                }
                        }
                    }
                </ul>
            </li>
        }

该代码仅部分有效。自然地,我的 jsTree 制作得很好,但默认值没有得到检查。问题不在于我的 isThisDatabaseSelectedForThisUser 方法,因为我调试并测试了它。它按预期工作。我猜

  • 元素的 class 有问题,但我不知道是什么。 get_checked 属性在运行时给出,以指示复选框已被单击并因此被选中。请注意,我在这里使用的是 jsTree 的复选框值,选择 < li > 元素的文本并不重要。

  • 好吧,我决定尝试数据属性方法,而不是 Class 方法,结果成功了。我使用以下代码,我的复选框在加载页面时被选中:

    < li data-jstree='{"opened":false,"selected":true}' id="@(obj.DBServerID)_@nameOfDB">@nameOfDB </li>
    

    我觉得自己很蠢。