es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear un HTML Helper personalizado para una lista de árbol desplegable en ASP.NET Core 6.

Este es un ejemplo de una lista desplegable en la fuente HTML. Quiero crear un ayudante de HTML para usar la opción general de lista de árbol con la opción de selección.
Por ejemplo, cada nivel solo muestra texto anidado de esta manera: A > A1 > A11.

Mi modelo:

DropdownTreeview{
public long Id { get; set; }
public long? IdParent { get; set; }
public string Name { get; set; }
}

<select class="form-control valid" data-val="true" data-val-required="El campo Categoría superior es obligatorio." id="ParentCategoryId" name="ParentCategoryId" aria-describedby="ParentCategoryId-error" aria-invalid="false">
<option selected="selected" value="0">[None]</option>
<option value="1">Computadoras</option>
<option value="2">Computadoras > Escritorios</option>
<option value="3">Computadoras > Portátiles</option>
<option value="4">Computadoras > Software</option>
<option value="5">Electrónicos</option>
<option value="6">Electrónicos > Cámara foto</option>
<option value="7">Electrónicos > Teléfonos celulares</option>
<option value="8">Electrónicos > Otros</option>
<option value="9">Ropa</option>
<option value="10">Ropa > Zapatos</option>
<option value="11">Ropa > Ropa</option>
<option value="12">Ropa > Ropa > Camisa</option>
<option value="13">Ropa > Ropa > Camiseta</option>
<option value="14">Ropa > Accesorios</option>
<option value="15">Descargas</option>
<option value="16">Libros</option>
<option value="17">Joyería</option>
<option value="18">Tarjetas de regalo</option>
</select>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un ayudante HTML para una opción de lista de árbol general con opción de selección, puedes usar el siguiente código:

    using System.Collections.Generic;
    using System.Linq.Expressions;
    using System.Text;
    using System.Web.Mvc;
    using System.Web.Mvc.Html;
    
    public static class HtmlHelpers
    {
        public static MvcHtmlString TreeViewFor<tmodel, tproperty="">(
            this HtmlHelper<tmodel> htmlHelper,
            Expression<><tmodel, tproperty="">> expression,
            IEnumerable<dropdowntreeview> list,
            object htmlAttributes = null)
        {
            var selectList = GetSelectListItems(list, null, "");
            var dropdown = htmlHelper.DropDownListFor(expression, selectList, htmlAttributes);
            return dropdown;
        }
    
        private static IEnumerable<selectlistitem> GetSelectListItems(IEnumerable<dropdowntreeview> list, long? parentId, string prefix)
        {
            var items = list.Where(x => x.IdParent == parentId).Select(x =>
                new SelectListItem
                {
                    Value = x.Id.ToString(),
                    Text = (prefix == "" ? "" : prefix + " > ") + x.Name
                });
            var selectListItems = items as IList<selectlistitem> ?? items.ToList();
            foreach (var item in selectListItems)
            {
                var childItems = GetSelectListItems(list, long.Parse(item.Value), item.Text);
                if (childItems.Any())
                {
                    item.Group = new SelectListGroup { Name = item.Text };
                    foreach (var childItem in childItems)
                    {
                        item.Children.Add(childItem);
                    }
                }
            }
            return selectListItems;
        }
    }
    

    Puedes usar esta función de ayuda en tu vista de la siguiente manera:

    @Html.TreeViewFor(model => model.ParentCategoryId, Model.DropdownList)
    

    Aquí, TreeViewFor es un nuevo método de ayuda HTML que toma los siguientes parámetros:

    • expression: La expresión que proporciona el campo para el cual se está creando la vista de árbol.
    • list: La lista de elementos que se mostrarán en la vista de árbol.
    • htmlAttributes: Cualquier atributo HTML que deba aplicarse al elemento select.

    El ayudante crea una lista desplegable utilizando el método DropDownListFor y la rellena con los elementos del parámetro list, que es una lista de objetos DropdownTreeview. El ayudante genera de forma recursiva los elementos para la lista desplegable basándose en sus relaciones padre-hijo.

    Para mostrar una estructura de árbol anidada, se utiliza el método GetSelectListItems. Este método genera de forma recursiva los elementos para la lista desplegable, agregando un prefijo > a cada texto de los elementos hijos para indicar su jerarquía de padres. El método utiliza objetos SelectListItem para representar los elementos de la lista desplegable y agrega objetos SelectListGroup para representar grupos de elementos. Los objetos SelectListItem se agrupan bajo el grupo correspondiente mediante la configuración de la propiedad Group. Por último, el método devuelve los objetos SelectListItem como IEnumerable<selectlistitem>.

    La lista desplegable resultante mostrará los elementos anidados en un formato de vista de árbol, con los elementos padres mostrados como grupos de opciones y sus elementos hijos correspondientes como opciones anidadas.</tmodel,></tmodel,>

Comments are closed.