You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSTree加载JSON路径及ASP.NET Core树形CRUD实现相关问题

JSTree加载JSON路径及ASP.NET Core树形CRUD实现相关问题

嗨,我来帮你梳理下这个问题的解决思路和具体方案:

一、ASP.NET Core原生实现树形CRUD的可能性

首先说你问的「不用JSTree,ASP.NET Core能不能做树形CRUD视图」——答案是可以,但不推荐自己从零写。

你可以用Razor视图配合后端递归遍历数据生成HTML树形结构,再自己写JavaScript实现拖拽、右键菜单、编辑这些交互。但JSTree已经封装好了这些常用功能,能省掉大量重复代码,所以还是建议继续用JSTree配合ASP.NET Core后端来实现。

二、JSTree加载JSON数据的正确配置

看你之前的代码,旧版JSTree用json_data配置数据源,新版已经改成core.data了,你后来的修改方向是对的。这里给你补全正确的配置示例:

静态JSON文件加载(GET请求)

如果你的JSON是静态文件,直接指定URL即可,不需要复杂的AJAX回调:

$(document).ready(function (){
    $('#html2').jstree({
        "core": {
            "themes": {
                "variant": "large"
            },
            "max_children": 2,
            "data": {
                "url": "@Model.getFile()", // 这里填可访问的JSON URL
                "dataType": "json",
                "type": "GET"
            }
        },
        "plugins": ["contextmenu", "dnd", "search", "state", "types", "wholerow"]
    });
});

自定义JSON结构转换

如果你的JSON格式不是JSTree默认的(默认需要id、text、children字段的数组),可以用success回调转换格式:

"data": {
    "url": "@Model.getFile()",
    "dataType": "json",
    "success": function (response) {
        // 假设你的JSON是 {"root": {"branche": "example"}}
        return [{
            "id": "root",
            "text": response.root.branche,
            "children": [] // 有子节点的话在这里添加对应数组
        }];
    }
}

三、核心问题:本地路径转可访问URL路径

你现在遇到的「把getFile()返回的路径转成URL」是关键,这里要注意两个点:

1. 静态JSON文件必须放在wwwroot目录下

浏览器无法直接访问服务器的本地物理文件(比如C:\Projects\MyApp\data.json),必须把JSON文件放在ASP.NET Core的wwwroot文件夹下,这样才能通过Web URL访问(比如http://localhost:5000/data/tree.json)。

2. 后端getFile()要返回Web可访问的相对路径

如果你的getFile()之前返回的是本地物理路径,需要修改后端代码,通过IWebHostEnvironment获取wwwroot路径,然后返回相对URL:

// 后端控制器/ViewModel的代码示例
private readonly IWebHostEnvironment _webHostEnv;

// 构造函数注入IWebHostEnvironment
public YourViewModel(IWebHostEnvironment webHostEnv)
{
    _webHostEnv = webHostEnv;
}

public string getFile()
{
    // 假设JSON文件在wwwroot/data/tree.json
    string physicalPath = Path.Combine(_webHostEnv.WebRootPath, "data", "tree.json");
    // 返回Web可访问的相对URL,前端直接用这个路径就行
    return "/data/tree.json";
}

3. 前端路径不需要手动替换斜杠

ASP.NET Core会自动处理路径的斜杠问题,直接用@Model.getFile()即可,不需要Replace(@"\", "/")。

四、树形CRUD的实现思路

解决了数据加载问题后,CRUD功能可以这样实现:

  • 添加节点:通过JSTree的右键菜单触发,收集节点信息后发送POST请求到后端API,保存数据成功后,调用JSTree的create_node方法刷新树形结构。
  • 修改节点:监听节点编辑事件,发送PUT请求到后端更新数据,成功后调用rename_node方法更新视图。
  • 删除节点:右键点击删除,发送DELETE请求到后端,成功后调用delete_node方法移除节点。

后端需要维护一张树形结构的数据表(比如包含Id、ParentId、Text等字段),并提供对应的增删改查API接口。

备注:内容来源于stack exchange,提问作者Thiago Theodoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:02:47