使用C#和Web API进行jsTree延迟加载

问题描述

我当前正在使用jsTree v3.3.10,并尝试通过Web API调用加载结构。

JavaScript:

$('#ksbbrowser').jstree({
                core: {
                    data: {
                        type: 'GET',dataType: 'json',contextType: 'application/json',url: function (node) {
                            if (node.id == "#") {
                                return '/api/search/talent/ksbtree/root';
                            }
                            else {
                                return '';
                            }
                        },data: function (node) {
                            return { id: node.id };
                        }
                    }
                }
            });

C#WebAPI端点代码

[HttpGet,Route("api/search/talent/ksbtree/{Type}")]
        public String GetKSBTree(String Type)
        {
            List<DataModels.JSTreeNode> lNodes = new List<JSTreeNode>();
            String sJSON = "";

            switch (Type)
            {
                case "root":
                    var first = new[] {
                        new {
                            id = "root-id",text = "KSBs",state = new { opened = true },children = true
                        }
                    };

                    sJSON = JSONHelper.Serialize(first);

                    break;
                default:
                    break;
            }


            return sJSON;
        }

我通过调用返回了json,并且那里有适当的contentType标头,但是jsTree没有正确加载树。这是通过邮递员返回的JSON示例:

"[{\"id\":\"root-id\",\"text\":\"KSBs\",\"state\":{\"opened\":true},\"children\":true}]"

但是正如您在此处看到的那样,jsTree无法正确处理JSON。

Tree Result

有人根本不知道我在做什么错。

解决方法

我知道了。 WebAPI返回的字符串类型,而jsTree在内部不执行其自身的parseJSON。为了解决这个问题,我将端点的返回类型更改为HTTPResponseMessage。

 public HttpResponseMessage GetKSBTree(String Type)

然后我格式化响应消息并返回它:

HttpResponseMessage rmMessage = new HttpResponseMessage() { Content = new StringContent(sJSON) };

rmMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

return rmMessage;