Добавьте ссылку для каждого узла в JTree, используя Asp.Net Ядро

#asp.net-core #treeview #ef-core-3.1

#asp.net-ядро #просмотр дерева #ef-core-3.1

Вопрос:

как я могу добавить ссылку на тег к каждому узлу (корневому или дочернему) в JTree, я извлекаю данные из базы данных с помощью EFCore, и я хочу, чтобы у каждого узла была такая ссылка:

 <a class="btn btn-primary" asp-action="TaskTypeDetail" asp-controller="Admin" asp-route-TaskTypeNumber=@item.TaskTypeNumber>details</a> 
 

mycontroller, подобный этому :

  public class TreeviewController : Controller
{
    private readonly RoleManager<IdentityRole> roleManager;
    private readonly UserManager<ApplicationUser> userManager;
    private readonly ApplicationDbContext applicationDbContext;

    public TreeviewController(RoleManager<IdentityRole> roleManager, UserManager<ApplicationUser> userManager, ApplicationDbContext applicationDbContext)
    {
        this.roleManager = roleManager;
        this.userManager = userManager;
        this.applicationDbContext = applicationDbContext;
    }
    public IActionResult Index()
    {
        return View();
    }
    public JsonResult GetRoot()
    {
        List<JsTreeModel> items = GetTree();

        return new JsonResult (  items );
    }

    public JsonResult GetChildren(string id)
    {
        List<JsTreeModel> items = GetTree(id);

        return new JsonResult (  items );
    }

    public List<JsTreeModel> GetTree()
    {
        bool checkchildren;
        
        var items = new List<JsTreeModel>();
        foreach (var role in roleManager.Roles)
        {
            foreach (var user in userManager.Users)
            {
                checkchildren = false;
                var checkUserInRole = userManager.IsInRoleAsync(user, role.Name).Resu<
                if (checkUserInRole)
                {
                 
                    var checkEmployeeForUser = applicationDbContext.EmployeeInRoles.Where(s => s.RoleId == role.Id).ToList();
                    if (checkEmployeeForUser.Count > 0)
                    {
                        checkchildren = true;
                    }
                    items.Add(new JsTreeModel { id = user.Id.ToString(), parent = "#", text = user.Name " " user.Family " ریشه " , children = checkchildren,a_attr=""});
                }
            }
        }



     
        // set items in here

        return items;
    }

    public List<JsTreeModel> GetTree(string id)
    {
        var items = new List<JsTreeModel>();

        // set items in here
        //Loop and add the Child Nodes.
        bool checkchildren;
        string Role="";
        foreach (var subType in applicationDbContext.EmployeeInRoles)
        {
            
            checkchildren  = false;
            string Parentid = "";
            foreach (var findParent in userManager.Users)
            {
                var roleid = roleManager.FindByIdAsync(subType.RoleId);
                var checkParent = userManager.IsInRoleAsync(findParent, roleid.Result.Name).Resu<
                if (checkParent) {
                    Parentid = findParent.Id;
                }
            }
            
            var user = userManager.Users.SingleOrDefault(s => s.Id == subType.UserId);
            foreach(var role in roleManager.Roles)
            {
                var checkUserInRole = userManager.IsInRoleAsync(user, role.Name).Resu<
                if (checkUserInRole)
                {
                    Role = role.Id;
                    break;
                }
            }
            
            var checkEmployeeForUser = applicationDbContext.EmployeeInRoles.Where(s => s.RoleId == Role).ToList();
            if (checkEmployeeForUser.Count > 0)
            {
                checkchildren = true;
            }
            items.Add(new JsTreeModel { id =  subType.Id.ToString(), parent = Parentid, text = user.Name   " "   user.Family, children=checkchildren});
        }

        return items;
    }
}
 

JsTreeModel выглядит так:

 public class JsTreeModel
{
    public string id { get; set; }
    public string parent { get; set; }
    public string text { get; set; }
    public string a_attr { get; set; }
    public bool children { get; set; } // if node has sub-nodes set true or not set false
}
 

и Index.cshtml

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
 
 <div id='treeview'></div>
    <script>

        $('#treeview').jstree({
            "plugins": ["search","contextmenu"],
        'core': {
            'data': {
            'url': function (node) {
                    return node.id === '#' ? "/Treeview/GetRoot" : "/Treeview/GetChildren/"   node.id;

                },
                'data': function (node) {
                    return {'id': node.id };
                }
            }
        }
    });

    $('#treeview').on('changed.jstree', function (e, data) {
            console.log("=> selected node: "   data.node.id);
    });
 

но каждый узел, который показывает мне, когда я нажимаю на него, не имеет ссылки и # вместо ссылки
, может ли кто-нибудь мне помочь?

Комментарии:

1. Вы ничего не делали, но регистрировали его при нажатии jstree . Проверьте прослушивание событий .

2. Именно я хочу создать этот режим и поместить ссылку для каждого узла

3. Как ссылка связана с узлом?

4. в моем коде каждый узел — это имя пользователя, и каждая ссылка представляет их отчеты, вы можете мне помочь?