问题描述
我当前正在使用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。
有人根本不知道我在做什么错。
解决方法
我知道了。 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;