/// <summary>
        /// Construct list for tree view.
        /// </summary>
        /// <typeparam name="TModel">Type of model.</typeparam>
        /// <typeparam name="TProperty">Type of selected property.</typeparam>
        /// <param name="helper">Html helper.</param>
        /// <param name="expression">Expression which selects property.</param>
        /// <param name="source">Soruce of tree view.</param>
        /// <returns>Tree view list as FluentTagBuilder.</returns>
        private static FluentTagBuilder ConstructList <TModel, TProperty>(
            this HtmlHelper <TModel> helper,
            Expression <Func <TModel, TProperty> > expression,
            TreeViewSource <TProperty> source)
            where TProperty : struct
        {
            // CSS classes
            string listCssClass   = "tree-view-list";
            string loadedCssClass = "tv-loaded";

            // Construct tree view list
            FluentTagBuilder treeViewList = new FluentTagBuilder("ul")
                                            .AddCssClass(listCssClass);

            // If there is not any item return
            if (source == null ||
                source.ItemList == null ||
                source.ItemList.Count == 0)
            {
                return(treeViewList);
            }

            // If source is not empty add class
            treeViewList.AddCssClass(loadedCssClass);

            // Construct list items and add them to treeViewList
            foreach (TreeViewItem <TProperty> listItemSource in source.ItemList)
            {
                FluentTagBuilder listItem = helper
                                            .ConstructListItem(expression, listItemSource);
                treeViewList.AppendChild(listItem);
            }

            return(treeViewList);
        }
Exemple #2
0
        public void BindPermissionsToTreeView(List <SysRolePermission> permissions)
        {
            TreeViewSource.ForEach(x => x.IsChecked = false);

            var nodes = new List <TriStateTreeViewNode>();

            TreeViewSource.ForEach(x => nodes.AddRange(x.ConvertToList()));
            foreach (var permission in permissions.FindAll(x => x.ElementInfo != null))
            {
                var node = nodes.FirstOrDefault(x => x.NodeType == ElementNodeType && x.ID == permission.ElementInfo.ElementID);
                node.IsChecked = true;
            }
        }
        /// <summary>
        /// Construct tree view for selected property.
        /// </summary>
        /// <typeparam name="TModel">Type of model.</typeparam>
        /// <typeparam name="TProperty">Type of selected property.</typeparam>
        /// <param name="helper">Html helper.</param>
        /// <param name="expression">Expression which selects property.</param>
        /// <param name="source">Source for tree view.</param>
        /// <param name="sourceUrl">Url to get child items using Ajax.</param>
        /// <param name="searchExpression">Search expression to filter leaves.</param>
        /// <returns>Constructed Tree view.</returns>
        public static MvcHtmlString TreeViewFor <TModel, TProperty>(
            this HtmlHelper <TModel> helper,
            Expression <Func <TModel, TProperty> > expression,
            TreeViewSource <TProperty> source,
            string sourceUrl,
            string searchExpression)
            where TProperty : struct
        {
            // CSS classes
            string treeViewCssClass    = "tree-view";
            string levelCssClassFormat = "level-{0}";
            string errorCssClass       = string.Format("{0}__error", treeViewCssClass);
            string rootListCssClass    = "root-list";

            // Attribute keys
            string levelAttribute           = "data-tv-level";
            string forAttribute             = "data-tv-for";
            string sourceUrlAttribute       = "data-tv-source-url";
            string searchExpresionAttribute = "data-tv-search-exp";

            // Get model name from expression
            string modelName = ExpressionHelper.GetExpressionText(expression);

            // Construct root list
            FluentTagBuilder rootList = helper.ConstructList(expression, source)
                                        .AddCssClass(string.Format(levelCssClassFormat, "0"))
                                        .AddCssClass(rootListCssClass)
                                        .MergeAttribute(levelAttribute, "0");

            // Construct tree view container
            FluentTagBuilder treeViewContainer = new FluentTagBuilder("div")
                                                 .AppendChild(rootList)
                                                 .MergeAttribute(forAttribute, modelName)
                                                 .MergeAttribute(sourceUrlAttribute, sourceUrl)
                                                 .MergeAttribute(searchExpresionAttribute, searchExpression)
                                                 .AddCssClass(treeViewCssClass);

            // Add error
            MvcHtmlString    validationMessage = helper.ValidationMessageFor(expression);
            FluentTagBuilder errorSpan         = new FluentTagBuilder("span")
                                                 .AddCssClass(errorCssClass)
                                                 .AppendChild(validationMessage);

            treeViewContainer.AppendChild(errorSpan);

            return(new MvcHtmlString(treeViewContainer.Render()));
        }
Exemple #4
0
        public List <SysRolePermission> GetPermissionsFromUI()
        {
            var result = new List <SysRolePermission>();

            var nodes = new List <TriStateTreeViewNode>();

            TreeViewSource.ForEach(x => nodes.AddRange(x.ConvertToList()));

            var allElements = SysPermissionProvider.GetInstance().AllSysModuleElements;
            var elements    = nodes.FindAll(x => x.NodeType == ElementNodeType && x.IsChecked == true);

            foreach (var element in elements)
            {
                var permission = new SysRolePermission()
                {
                    RoleID      = RoleID,
                    ElementInfo = allElements.FirstOrDefault(x => x.ElementID == element.ID),
                };
                result.Add(permission);
            }

            var allModules = SysPermissionProvider.GetInstance().AllSysModules;
            var modules    = nodes.FindAll(x => x.NodeType == ModuleNodeType && x.IsChecked == true);

            foreach (var module in modules)
            {
                var permission = new SysRolePermission()
                {
                    RoleID     = RoleID,
                    ModuleInfo = allModules.FirstOrDefault(x => x.ModuleID == module.ID),
                };
                result.Add(permission);
            }

            return(result);
        }