none
pasar un dato entre vista y controller para utilizar dos dropdownlist RRS feed

  • Pregunta

  • hola, voy a intentar explicar lo q estoy haciendo con mi codigo, en el view tengo 2 dropdownlist, una carga las provincias de españa y otro los municipios, los datos los carga  el controller mediante viewbag.provincias y viewbag.municipios, el de municipios debe filtrar por el de provincias, con eso quiero decir que cuando seleccione una provincia en el dropdownlist de municipios, solo se muestren los municipios de esa provincia, para ello ejecuto el javascript que he posteado, no se como enviar ese dato de la provincia al controller para cargar el viewbag de municipios, la consulta la tengo, solo me falta el valor por el q filtrar, ¿alguien puede hecharme una mano de como hacer esto?
    • Editado pit29 martes, 6 de febrero de 2018 15:54
    martes, 6 de febrero de 2018 15:53

Respuestas

  • Controller

    [HttpPost]
            public JsonResult ListadeAlgo(string parametro)
            {
                JsonResult result = new JsonResult();
                    municipios = Lista de municipios segun el parametro
                    result.Data = municipios;
    
                return result;
            }

    Vista 

    <script type="text/javascript"> $("#provincia").change(function () { $("#municipios").empty(); if ($(this).val() >= 0) {

    var url = "/" + Controller + "/" + Action var parametro = $(this).val() var Object = $("#municipios") $.ajax({ cache: false, url: url, type: 'Post', data: { parametro: parametro }, success: function (data) { $.each(data, function (i, valor) { Object.append("<option value=" + valor.Value + ">" + valor.Text + "</option>"); }); }, error: function (xhr, ajaxOptions, thrownError) { OnFailure(xhr); } }); } }); </script>

    Espero sea d tu utilidad


    Att. Franklin Andino



    • Editado Franklin Andino martes, 6 de febrero de 2018 16:21
    • Marcado como respuesta pit29 viernes, 9 de febrero de 2018 12:16
    martes, 6 de febrero de 2018 16:18
  • el scrip me esta dando el siguiente error:

    Excepción no controlada en línea 325, columna 26 en http://localhost:55196/Pozos

    0x800a138b - Error en tiempo de ejecución de JavaScript: No se puede asignar al resultado de una función

    el  script es este y esta en la view

      <script type="text/javascript">
                             $("#codigoProvincia").change(function () {
                             $("#codigoMunicipio").empty();
                             if ($(this).val() = "XXXX00") {
    
                                 var url = "/" + "Pozos" + "/" + "Create"
                                 var parametro = $(this).val()
                                 var Object = $("#codigoMunicipio")
                                 $.ajax({
                                     cache: false,
                                     url: url,
                                     type: 'Post',
    
                                     //data: { parametro: parametro },
                                     data: { codigoMunicipio: $("#codigoMunicipio").val() },
                                     success: function (data) {
                                             $.each(data, function (i, valor) {
                                         
                                             $("#codigoMunicipio").append('<option value="' + codigoMunicipio.Value + '">' +
                                             municipios.Text + '</option>');
                                         });
    
                                     },
    
                                     error: function (xhr, ajaxOptions, thrownError) {
    
                                         alert("¡ERROR!");
                                     }
    
                                 });
                             } else { alert("¡no se cumple la condicion!") }
                             });
                         </script>

    esta parte del codigo la tenes que modificar

     $("#codigoMunicipio").append('<option value="' + codigoMunicipio.Value + '">' +
                                             municipios.Text + '</option>');

     $("#codigoMunicipio").append('<option value="' + Valor.CampoID+ '">' +
                                             Valor.CampoNombre+ '</option>');


    Att. Franklin Andino

    • Marcado como respuesta pit29 viernes, 9 de febrero de 2018 12:15
    jueves, 8 de febrero de 2018 18:02

Todas las respuestas

  • Controller

    [HttpPost]
            public JsonResult ListadeAlgo(string parametro)
            {
                JsonResult result = new JsonResult();
                    municipios = Lista de municipios segun el parametro
                    result.Data = municipios;
    
                return result;
            }

    Vista 

    <script type="text/javascript"> $("#provincia").change(function () { $("#municipios").empty(); if ($(this).val() >= 0) {

    var url = "/" + Controller + "/" + Action var parametro = $(this).val() var Object = $("#municipios") $.ajax({ cache: false, url: url, type: 'Post', data: { parametro: parametro }, success: function (data) { $.each(data, function (i, valor) { Object.append("<option value=" + valor.Value + ">" + valor.Text + "</option>"); }); }, error: function (xhr, ajaxOptions, thrownError) { OnFailure(xhr); } }); } }); </script>

    Espero sea d tu utilidad


    Att. Franklin Andino



    • Editado Franklin Andino martes, 6 de febrero de 2018 16:21
    • Marcado como respuesta pit29 viernes, 9 de febrero de 2018 12:16
    martes, 6 de febrero de 2018 16:18
  • mi codigo es el siguiente:

    para el controller:

    Function Create() As ActionResult
                ViewBag.sector = db.Sector.ToList()
                ViewBag.ViewMunicipio = db.ViewMunicipio.ToList()
                ViewBag.ViewProvincia = db.ViewProvincia.ToList()
    
                Dim pozosSequia As Pozo = New Pozo()
                pozosSequia.Sector = New Sector
    
                'pozoVar.Documento = New List(Of Documento)
                'pozoVar.ViewMunicipio = New List(Of ViewMunicipio)
                'pozoVar.ViewProvincia = New List(Of ViewProvincia)
    
                'Dim pozosSequia As Pozo = New Pozo() pozo es el Model y Pozos es la carpeta donde estan las vistas
                Return View(pozosSequia)
            End Function
    
    
            <HttpPost()>
            <ValidateAntiForgeryToken()>
            Function create(pozosSequia As Pozo, provin As String, boton As String) As ActionResult
                ViewBag.ViewMunicipio = db.ViewMunicipio.Where(Function(muni) muni.codigoProvincia = provin)
                If boton IsNot Nothing Then
    
                    If boton.Equals("Guardar") Then
    
    
                        Dim ok As Boolean = False
    
                        Dim oPozo As Pozo = Nothing
                        oPozo = New Pozo
    
                        oPozo.nombre = pozosSequia.nombre
                        oPozo.xEtrs89Spacp = pozosSequia.xEtrs89Spacp
                        oPozo.yEtrs89Spacp = pozosSequia.yEtrs89Spacp
                        oPozo.rCatastral = pozosSequia.rCatastral
                        oPozo.rCatastralARJ = pozosSequia.rCatastralARJ
                        oPozo.codMasa = pozosSequia.codMasa
                        oPozo.nomMasa = pozosSequia.nomMasa
                        oPozo.titularDT = pozosSequia.titularDT
                        oPozo.datosAcequiaRealJucar = pozosSequia.datosAcequiaRealJucar
                        oPozo.titularidadCatastral = pozosSequia.titularidadCatastral
                        oPozo.electrificadoARJ = pozosSequia.electrificadoARJ
                        oPozo.documentosTitularidad = pozosSequia.documentosTitularidad
    
                        oPozo.id_sector = pozosSequia.id_sector
                        oPozo.Sector = New Sector
                        oPozo.Sector = GetSectoresPorId(pozosSequia.id_sector)
    
                        oPozo.codigoMunicipio = pozosSequia.codigoMunicipio
                        oPozo.codigoProvincia = pozosSequia.codigoProvincia
                        oPozo.refLocal = pozosSequia.refLocal
                        oPozo.promotor = pozosSequia.promotor
    
                        SetPozo(oPozo)
                        Return RedirectToAction("Index")
    
                    ElseIf boton.Equals("Cancelar") Then
                        Return RedirectToAction("Index")
                    End If
    
                End If
    
                ModelState.Clear()
                Return View()
    
            End Function


    el campo provin es el que intento pasar de la vista a mi controller y el la vista tengo este codigo:

     <div class="editor-field">
                         @Html.DropDownList("codigoProvincia", New SelectList(ViewBag.ViewProvincia, "codigoProvincia", "provincia", "Provincia"), "Seleccione provincia") @*New { onchange = "javascript:changeTextboxes();" })*@ @*<input type="text"  onChange="changeTextboxes()">*@
                        
                          @Html.ValidationMessageFor(Function(model) model.codigoProvincia)
               
                         <script type="text/javascript">
                             
                             $("#codigoProvincia").change(changeTextboxes);
                             function changeTextboxes() {
                                 
                                   }
                         </script>

    el valor provin seria el codogoProvincia y la funcion

    changeTextboxes estoy intentando que capture el valor para enviarlo al controller


    martes, 6 de febrero de 2018 16:42
  • no se como pasar el campo codigoprovincia que selecciona en el dropdownlist de la vista  en el evento

    $("#codigoProvincia").change(changeTextboxes);

    a la funcion create del controller Pozos, logro lanzar una alert pero no pasar el dato para utilizarlo, ¿alguien puede decirme como hacerlo? programo en visual basic.net
    miércoles, 7 de febrero de 2018 11:35
  • Controller

    [HttpPost]
            public JsonResult ListadeAlgo(string parametro)
            {
                JsonResult result = new JsonResult();
                    municipios = Lista de municipios segun el parametro
                    result.Data = municipios;
    
                return result;
            }

    Vista 

    <script type="text/javascript"> $("#provincia").change(function () { $("#municipios").empty(); if ($(this).val() >= 0) {

    var url = "/" + Controller + "/" + Action var parametro = $(this).val() var Object = $("#municipios") $.ajax({ cache: false, url: url, type: 'Post', data: { parametro: parametro }, success: function (data) { $.each(data, function (i, valor) { Object.append("<option value=" + valor.Value + ">" + valor.Text + "</option>"); }); }, error: function (xhr, ajaxOptions, thrownError) { OnFailure(xhr); } }); } }); </script>

    Espero sea d tu utilidad


    Att. Franklin Andino



    hola, podrias aclararme un poco tu codigo y que partes tendria que reemplazar con el mio que he posteado mas abajo?
    miércoles, 7 de febrero de 2018 13:42
  • tendrias que agregar esta acción en tu controlador

    [HttpPost]
            public JsonResult ListadeAlgo(string parametro)
            {
                JsonResult result = new JsonResult();
                    municipios = Lista de municipios segun el parametro
                    result.Data = municipios;
    
                return result;
            }

    la lista municipios lo llenarias asi como lo hacias anteriormente, solo que hoy lo harias con un filtro,

    este código lo agregarias en tu vista

    <script type="text/javascript"> $("#provincia").change(function () { $("#municipios").empty(); if ($(this).val() >= 0) {

    var url = "/" + Controller + "/" + Action var parametro = $(this).val() var Object = $("#municipios") $.ajax({ cache: false, url: url, type: 'Post', data: { parametro: parametro }, success: function (data) { $.each(data, function (i, valor) { Object.append("<option value=" + valor.Value + ">" + valor.Text + "</option>"); }); }, error: function (xhr, ajaxOptions, thrownError) { OnFailure(xhr); } }); } }); </script>

    el $("#Provincia") y el $("#municipios"), serian los ID de tus dos dropdownlist

    la parte de este código

    Object.append("<option value=" + valor.Value + ">" + valor.Text + "</option>");

    el valor.value y el valor.text serian las propiedades de tu model, por ejemplo si el id del municipio es IDmunicipio y el nombre es NombreMunicipio

    entonces te queradia asi

    Object.append("<option value=" + valor.IDmunicipio + ">" + valor.NombreMunicipio+ "</option>");

    la accion pasala a VB, te lo envio en C#


    Att. Franklin Andino

    miércoles, 7 de febrero de 2018 14:24
  • esoo que me envias esta en c#? porque yo programo en visual basic.net y
    JsonResult  
    no me aparece
    jueves, 8 de febrero de 2018 7:41
  • [HttpPost]
    Public Function ListadeAlgo(ByVal parametro As string ) As JsonResult 
    
    Dim result = new JsonResult()
     municipios = Lista de municipios segun el parametro
    result.Data = municipios
    return result
    End Function
    intenta con eso

    Att. Franklin Andino

    jueves, 8 de febrero de 2018 14:15
  • el scrip me esta dando el siguiente error:

    Excepción no controlada en línea 325, columna 26 en http://localhost:55196/Pozos

    0x800a138b - Error en tiempo de ejecución de JavaScript: No se puede asignar al resultado de una función

    el  script es este y esta en la view

      <script type="text/javascript">
                             $("#codigoProvincia").change(function () {
                             $("#codigoMunicipio").empty();
                             if ($(this).val() = "XXXX00") {
    
                                 var url = "/" + "Pozos" + "/" + "Create"
                                 var parametro = $(this).val()
                                 var Object = $("#codigoMunicipio")
                                 $.ajax({
                                     cache: false,
                                     url: url,
                                     type: 'Post',
    
                                     //data: { parametro: parametro },
                                     data: { codigoMunicipio: $("#codigoMunicipio").val() },
                                     success: function (data) {
                                             $.each(data, function (i, valor) {
                                         
                                             $("#codigoMunicipio").append('<option value="' + codigoMunicipio.Value + '">' +
                                             municipios.Text + '</option>');
                                         });
    
                                     },
    
                                     error: function (xhr, ajaxOptions, thrownError) {
    
                                         alert("¡ERROR!");
                                     }
    
                                 });
                             } else { alert("¡no se cumple la condicion!") }
                             });
                         </script>

    jueves, 8 de febrero de 2018 17:23
  • el scrip me esta dando el siguiente error:

    Excepción no controlada en línea 325, columna 26 en http://localhost:55196/Pozos

    0x800a138b - Error en tiempo de ejecución de JavaScript: No se puede asignar al resultado de una función

    el  script es este y esta en la view

      <script type="text/javascript">
                             $("#codigoProvincia").change(function () {
                             $("#codigoMunicipio").empty();
                             if ($(this).val() = "XXXX00") {
    
                                 var url = "/" + "Pozos" + "/" + "Create"
                                 var parametro = $(this).val()
                                 var Object = $("#codigoMunicipio")
                                 $.ajax({
                                     cache: false,
                                     url: url,
                                     type: 'Post',
    
                                     //data: { parametro: parametro },
                                     data: { codigoMunicipio: $("#codigoMunicipio").val() },
                                     success: function (data) {
                                             $.each(data, function (i, valor) {
                                         
                                             $("#codigoMunicipio").append('<option value="' + codigoMunicipio.Value + '">' +
                                             municipios.Text + '</option>');
                                         });
    
                                     },
    
                                     error: function (xhr, ajaxOptions, thrownError) {
    
                                         alert("¡ERROR!");
                                     }
    
                                 });
                             } else { alert("¡no se cumple la condicion!") }
                             });
                         </script>

    esta parte del codigo la tenes que modificar

     $("#codigoMunicipio").append('<option value="' + codigoMunicipio.Value + '">' +
                                             municipios.Text + '</option>');

     $("#codigoMunicipio").append('<option value="' + Valor.CampoID+ '">' +
                                             Valor.CampoNombre+ '</option>');


    Att. Franklin Andino

    • Marcado como respuesta pit29 viernes, 9 de febrero de 2018 12:15
    jueves, 8 de febrero de 2018 18:02
  • solucionado todo, muchas gracias por vuestras aportaciones, aqui dejo el javascript final, y mi funcion del controller:

       <script type="text/javascript">
                             $("#codigoProvincia").change(function () {
                             $("#codigoMunicipio").empty();
                             if ($(this).val() != "" ) {
                                 
                                 //alert($(this).val());
    
                                 var url = "/" + "Pozos" + "/" + "ListadeMuni";
                                 var parametro = $(this).val();
                                 //var Object = $("#codigoMunicipio");
                                
                                 //alert(parametro);
    
                                 $.ajax({
                                     cache: false,
                                     url: url,
                                     type: 'Post',
                                     dataType: 'json',
                                     data: { parametro: parametro },
                                     
                                     success: function (data) {
                                             $.each(data, function (i, valor) {
                                         
                                                 $("#codigoMunicipio").append('<option value="' + valor.codigoMunicipio + '">' + valor.municipio + '</option>');
                                         });
    
                                     },
    
                                     error: function (xhr, ajaxOptions, thrownError) {
    
                                         alert("¡ERROR!");
                                     }
    
                                 });
                             } else { alert("¡no se cumple la condicion!") }
                             });
                         </script>
       <HttpPost>
            Public Function ListadeMuni(ByVal parametro As String) As JsonResult
    
                Dim result = New JsonResult()
                Dim municipios = db.ViewMunicipio.Where(Function(muni) muni.codigoProvincia = parametro)
    
                result.Data = municipios
                Return result
            End Function



    viernes, 9 de febrero de 2018 12:14