This forum is not used anymore. Please ask new questions to Stack Overflow: https://stackoverflow.com/questions/tag ... ort=newest (use aspnetboilerplate tag).
By saYRam
#2886 In two days i'm trying to build Role View. In fuct working permissions is beats me. But i decide to try what can i do.

I reasearched JsTree and Mvc at google. And i found Recursive and FlasObject samples.

Code: Select all    public class FlatObject
    {
        public string Id { get; set; }
        public string ParentId { get; set; }
        public string Data { get; set; }

        public FlatObject(string name, string id, string parentId)
        {
            Data = name;
            Id = id;
            ParentId = parentId;
        }

    }
    public class RecursiveObject
    {
        public string Data { get; set; }
        public string Id { get; set; }
        public FlatTreeAttribute Attr { get; set; }
        public List<RecursiveObject> Children { get; set; }
    }

    public class FlatTreeAttribute
    {
        public string id;
        public bool selected;
    }


this is the create action of RoleController

Code: Select all        public ActionResult Create()
        {

            var permissions = _permissionManager.GetAllPermissions(multiTenancySides: Abp.MultiTenancy.MultiTenancySides.Tenant);

            List<FlatObject> flatObject = new List<FlatObject>();

            foreach (var item in permissions)
            {
                if (item.Parent != null)
                {
                    flatObject.Add(new FlatObject(item.Name, item.Name, item.Parent.Name));
                }
                else
                {
                    flatObject.Add(new FlatObject(item.Name, item.Name, ""));
                }
            }

            var recursiveObjects = FillRecursive(flatObject, "");

            var viewModel = new CreateEditRoleViewModel
            {
                Permissions = recursiveObjects
            };

            return View(viewModel);
        }


Code: Select all        private static List<RecursiveObject> FillRecursive(List<FlatObject> flatObjects, string parentId)
        {
            List<RecursiveObject> recursiveObjects = new List<RecursiveObject>();

            foreach (var item in flatObjects.Where(x => x.ParentId.Equals(parentId)))
            {
                recursiveObjects.Add(new RecursiveObject
                {
                    Data = item.Data,
                    Id = item.Id,
                    Children = FillRecursive(flatObjects, item.Id)
                });
            }

            return recursiveObjects;
        }


and here is the ViewModel
Code: Select all    public class CreateEditRoleViewModel
    {
        public RoleDto Role { get; set; }
        //public IReadOnlyList<Permission> Permissions { get; set; }
        public List<RecursiveObject> Permissions { get; set; }
    }


Create View
Code: Select all                                    <div id="data">
                                        <ul>
                                            @foreach (var item in Model.Permissions)
                                            {
                                                <li class="jstree-open">
                                                    @item.Data
                                                    <ul>
                                                        @foreach (var child in item.Children)
                                                        {
                                                            <li class="jstree-open">@child.Data</li>
                                                        }
                                                    </ul>
                                                </li>
                                            }
                                        </ul>
                                    </div>


and finally the java script
Code: Select all$(document).ready(function () {
    $('#data').jstree({

        "plugins": ["checkbox"]
    });

    $('#data').on("changed.jstree", function (e, data) {
        if (data.selected.length) {
            $(data.selected).each(function (idx) {
                var node = data.instance.get_node(data.selected[idx]);
            });
        }
    });
});


and the result.

Well,
1-) How can i get the selected roles for current user and reflect it to the jsTree.
2-) How can i handle the post values?

thank you.
Attachments
Ekran Görüntüsü 2016-01-25 06.05.23.png
Ekran Görüntüsü 2016-01-25 06.05.23.png (14.77 KiB) Viewed 1812 times