none
Cargar Combox en cascada RRS feed

  • Pregunta

  • Hola:

     Tengo un entidad llamada Empresa la cual dentro de sus propiedades existe una llamada ColoniaId, esta propiedad debe de ser llenada a partir de la selección de un Combo y para llegar a esto necesito ir aplicando filtros a otros dos Combos. Estados llena Municipios y Municipios llena Colonias de ahí es donde debo tomar el valor de ColoniaId, el tema es ¿Como llenar los combos con los valores de las clases para poder tomar al valor de los Ids e ir aplicando los filtros correspondientes?

     Agradezco cualquier información que puedan ofrecerme.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 23 de noviembre de 2015 21:15

Respuestas

  • Hola

    Todos tus combos deben tener id para que puedas acceder a su valor del dato seleccionado, utilizando jquery puedes invocar cambios en caso de que le valor cambie.

    Supongamos que tienes tres combos llamado combo 1, 2 y 3

    Hola
    
    Todos tus combos deben tener id para que puedas acceder a su valor del dato seleccionado, utilizando jquery puedes invocar cambios en caso de que le valor cambie.
    
    Supongamos que tienes tres combos llamado combo 1, 2 y 3
    
     $(document).ready(function () {
            $("#combo1").change(function () {
                evaluaCondicion();
            });
    });
    function actualizaCombo2() {
            text = "";
            //obtenemos el valor
            var valor = $("#combo1").val();
            //aqui debes llamar a un ajax o el lugar donde estaran los otros valores.
    
    for (i = 0; i < valores.length; i++) {
              text += '<option value="' + valores[0] + '">' + perfiles[1] + '</option>';
           
    }       //aqui le asignamos los nuevos valores al combo2
            $('#combo2').empty().append(text);
    
        }

    http://jsfiddle.net/b9tMU/13/

    Saludos

    lunes, 23 de noviembre de 2015 21:37
  • hola

    podrias aplicar esta tecnica

    [ASP.NET MVC] Carga DropDownList dependientes

    en este caso cuando cambias la seleccion del combo realiza un post al action para cargar los otros combos, lo menciono porque no dices nada si quieres hacerlo desde ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de noviembre de 2015 21:58
  • >>Es mejor usar Ajax o usar el unico Action como lo haces en tu articulo?

    depende, hay varias formas de lograr lo que planteas

    -podrias usar el ViewBag para definir la lista de los combos

    -podrias usar propiedades en el viewmodel (como explico en los articulos)

    -podrias usar el Ajax.BeginForm() para definir acciones que actualicen solo una parte del codiho

    -podrias usar jquery con $.ajax para ir cargando los items de cada combo y no realziar postback de la pagina cuando vas cambiaando la seleccion

    como veras no hay una unica opcion, debes evaluar segun que quieras lograr

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de noviembre de 2015 22:24
  • Hola:

     Es mejor usar Ajax o usar el unico Action como lo haces en tu articulo?


    Saludos desde Monterrey, Nuevo León, México!!!


    A la mayoria de los usuarios no les agrada recargar la pagina por lo que se usa AJAX en esos casos, pero queda a tu consideracion, hay muchas maneras de hacerlo.

    Saludos

    lunes, 23 de noviembre de 2015 23:17
  • Hola:

     Al final termine usando esta opción:

    https://github.com/alexanderar/Mvc.CascadeDropDown

     El problema es que el carácter "< y >" no me lo considera valido, la lista que retorna una de las funciones y que se utiliza para llenar el DropDownList la convierto en un Json y este json contiene un primer elemento que es "<<<Seleccione>>>" entonces al momento de llegar a la vista, este primer elemento me lo considera como una etiqueta y solo despliega "<<>>".

    Alguna solución que se sepan para esto?


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 26 de noviembre de 2015 21:47
  • >>Usando esa secuencia de escape puedo ver claramente el '<' en los elementos del DropDown pero el problema donde es que debo de reemplazarlos?

    cuando generas los datos en el linq

    select new
     {
        Value = s.MunicipioId,
        Text = HttpContext.HtmlEncode(s.Nombre)
     }).ToList();


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 26 de noviembre de 2015 23:41
  • Muchas gracias a todos:

     Leandro me funciono pero con:

                              select new
                              {
                                  Value = s.MunicipioId,
                                  Text = WebUtility.HtmlEncode(s.Nombre)
                              }).ToList();
    
    Ahora todo trabajando como se esperaba.



    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 27 de noviembre de 2015 3:07

Todas las respuestas

  • Hola

    Todos tus combos deben tener id para que puedas acceder a su valor del dato seleccionado, utilizando jquery puedes invocar cambios en caso de que le valor cambie.

    Supongamos que tienes tres combos llamado combo 1, 2 y 3

    Hola
    
    Todos tus combos deben tener id para que puedas acceder a su valor del dato seleccionado, utilizando jquery puedes invocar cambios en caso de que le valor cambie.
    
    Supongamos que tienes tres combos llamado combo 1, 2 y 3
    
     $(document).ready(function () {
            $("#combo1").change(function () {
                evaluaCondicion();
            });
    });
    function actualizaCombo2() {
            text = "";
            //obtenemos el valor
            var valor = $("#combo1").val();
            //aqui debes llamar a un ajax o el lugar donde estaran los otros valores.
    
    for (i = 0; i < valores.length; i++) {
              text += '<option value="' + valores[0] + '">' + perfiles[1] + '</option>';
           
    }       //aqui le asignamos los nuevos valores al combo2
            $('#combo2').empty().append(text);
    
        }

    http://jsfiddle.net/b9tMU/13/

    Saludos

    lunes, 23 de noviembre de 2015 21:37
  • hola

    podrias aplicar esta tecnica

    [ASP.NET MVC] Carga DropDownList dependientes

    en este caso cuando cambias la seleccion del combo realiza un post al action para cargar los otros combos, lo menciono porque no dices nada si quieres hacerlo desde ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de noviembre de 2015 21:58
  • Hola:

     Es mejor usar Ajax o usar el unico Action como lo haces en tu articulo?


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 23 de noviembre de 2015 22:10
  • Hola JoséLuisGarcía,

    Lo que deberías esperar es que ante el cambio de selección de un desplegable se cargue sólo el desplegable dependiente y ello lo logras con Ajax, sobre eso no hay mucha discusión.


    lunes, 23 de noviembre de 2015 22:17
  • >>Es mejor usar Ajax o usar el unico Action como lo haces en tu articulo?

    depende, hay varias formas de lograr lo que planteas

    -podrias usar el ViewBag para definir la lista de los combos

    -podrias usar propiedades en el viewmodel (como explico en los articulos)

    -podrias usar el Ajax.BeginForm() para definir acciones que actualicen solo una parte del codiho

    -podrias usar jquery con $.ajax para ir cargando los items de cada combo y no realziar postback de la pagina cuando vas cambiaando la seleccion

    como veras no hay una unica opcion, debes evaluar segun que quieras lograr

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de noviembre de 2015 22:24
  • Hola:

     Es mejor usar Ajax o usar el unico Action como lo haces en tu articulo?


    Saludos desde Monterrey, Nuevo León, México!!!


    A la mayoria de los usuarios no les agrada recargar la pagina por lo que se usa AJAX en esos casos, pero queda a tu consideracion, hay muchas maneras de hacerlo.

    Saludos

    lunes, 23 de noviembre de 2015 23:17
  • Mucha gracias a todos.

     Estoy buscando informacion sobre Ajax y la manera de usarlo para estos casos. Regreso con noticias


    Saludos desde Monterrey, Nuevo León, México!!!

    martes, 24 de noviembre de 2015 0:33
  • Mucha gracias a todos.

     Estoy buscando informacion sobre Ajax y la manera de usarlo para estos casos. Regreso con noticias


    Saludos desde Monterrey, Nuevo León, México!!!

    Aqui te dejo un ejemplo.

    http://www.joe-stevens.com/2010/02/23/populate-a-select-dropdown-list-using-jquery-and-ajax/

    Saludos

    martes, 24 de noviembre de 2015 0:57
  • Hola:

     Al final termine usando esta opción:

    https://github.com/alexanderar/Mvc.CascadeDropDown

     El problema es que el carácter "< y >" no me lo considera valido, la lista que retorna una de las funciones y que se utiliza para llenar el DropDownList la convierto en un Json y este json contiene un primer elemento que es "<<<Seleccione>>>" entonces al momento de llegar a la vista, este primer elemento me lo considera como una etiqueta y solo despliega "<<>>".

    Alguna solución que se sepan para esto?


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 26 de noviembre de 2015 21:47
  • Intenta manejarlos en UTF8.

    En el caso del & se deberá usar la secuencia &amp;

    En el caso del “ se deberá usar la secuencia &quot;

     En el caso del < se deberá usar la secuencia &lt;

     En el caso del > se deberá usar la secuencia &gt;

    En el caso del ‘ se deberá usar la secuencia &apos;

    Saludos

    jueves, 26 de noviembre de 2015 22:24
  • Hola Norberto:

     Usando esa secuencia de escape puedo ver claramente el '<' en los elementos del DropDown pero el problema donde es que debo de reemplazarlos?

    Mi funcion del controller regresa algo como esto:

            [AcceptVerbs(HttpVerbs.Get)]
            public ActionResult GetById(string estadoId)
            {
                if (String.IsNullOrEmpty(estadoId))
                {
                    throw new ArgumentNullException("estadoId");
                }
                int id = 0;
                bool isValid = Int32.TryParse(estadoId, out id);
                var states = _municipiosRepository.Filter(x => x.EstadoId.Equals(id), true);
                var result = (from s in states
                              select new
                              {
                                  Value = s.MunicipioId,
                                  Text = s.Nombre
                              }).ToList();
    
                return Json(result, JsonRequestBehavior.AllowGet);
            }

     En el view yo hago esto:

    <div class="col-sm-4">
        @Html.CascadingDropDownListFor(expression: m => m.MunicipioId,
        triggeredByProperty: m => m.EstadoId,
        url: Url.Action("GetById", "Company"),
        ajaxActionParamName: "estadoId",
        disabledWhenParrentNotSelected: true,
        htmlAttributes: new { @class = "form-control" })
    </div>

     En este caso no veo donde definir los caracteres de escape...

     Lo que mencionas del Utf-8 donde debe de ir?



    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 26 de noviembre de 2015 23:37
  • >>Usando esa secuencia de escape puedo ver claramente el '<' en los elementos del DropDown pero el problema donde es que debo de reemplazarlos?

    cuando generas los datos en el linq

    select new
     {
        Value = s.MunicipioId,
        Text = HttpContext.HtmlEncode(s.Nombre)
     }).ToList();


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 26 de noviembre de 2015 23:41
  • Muchas gracias a todos:

     Leandro me funciono pero con:

                              select new
                              {
                                  Value = s.MunicipioId,
                                  Text = WebUtility.HtmlEncode(s.Nombre)
                              }).ToList();
    
    Ahora todo trabajando como se esperaba.



    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 27 de noviembre de 2015 3:07