/// <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); }
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())); }
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); }