Cambiar La lista de DropDownList en el evento OnChange

publicado por: Anonymous

buen día

tengo el siguiente código para asignado a un listado a mi DropDownList desde el controller

ViewBag.Ciudad = new SelectList(GetCiudadAll, "idCiudad", "NombreCiudad");

en la vista

   @Html.DropDownList("Ciudad", (SelectList)ViewBag.Ciudad, "-- Seleccione Ciudad --", new { @class = "form-control", required = "required" })

pero se necesita que para ciertos tipos de Impuesto se cambie el listado de ciudades para esto realizo esto en la vista

    <script type=“text/javascript”>
    $('#TipoImpuesto').change(function() {
               if ($('#TipoImpuesto').val() == ('CO2')) {
                    {
                      var CiudadesPaises = ['Mexico', 'Caracas', 'Bogota', 'Lima', 'Quito'];
                        @ViewBag.Ciudad=CiudadesPaises;
                    }
                }
            });
</script>

pero el DropDownList no cambia el listado que tiene que visualizar, como o porque no se puede visualizar el nuevo listado en mi vista?

solución

En el codigo que muestras estas mezclando partes que ejecutan en el cliente y partes en el servidor, esno no funciona

Si quieres cambiar dinamicamente usando codigo cliente los items del combo debes usar jquery, pero el ViewBag no tiene nada que ver, eso solo aplica cuando envias datos desde el action a la view cuando se renderiza en el servidor

<script type=“text/javascript”>
    $('#TipoImpuesto').change(function() {
       if ($('#TipoImpuesto').val() == ('CO2')) {
            {
                $('#Ciudad').find('option').remove();

                var CiudadesPaises = ['Mexico', 'Caracas', 'Bogota', 'Lima', 'Quito'];

                $.each(CiudadesPaises, function( index, value ){
                    var option = $('<option value="'+value+'">'+value+'</option>');
                    $('#Ciudad').append(option);
                });

            }
        }
    });
</script>

como veras la idea es seleccionar el combo y usar el append() para agregar options, pero todo se hace por medio de codigo javascript/jquery

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *