none
pasar variable al controller RRS feed

  • Pregunta

  • hola, necesito para una variable a mi controller para utilizar esa variable en una consulta despues de haber cargado el valor de mi dropdownlist,

    javascript que captura el valor de mi dropdownlist el valor esta en la variable provin:

      <script type="text/javascript">
                             $("#codigoProvincia").change(changeTextboxes() );

                             function changeTextboxes() {
                                 volor1 = $(this).val();
                                 string provin: @ViewBag.Valor1;
                         </script>

    no se si estoy guardando de forma correcta la variable, en el controler utilizo esto:

    ViewBag.ViewMunicipio = db.ViewMunicipio.Where(Function(muni) muni.codigoProvincia = provin)

    provin no se como debo pasarla, deberia pasarla en la funcion create? con una @? no se como hacerlo

    lunes, 5 de febrero de 2018 12:06

Todas las respuestas

  • Para que algo pase de la vista al controlador, tiene que incluirse en el POST o GET de HTTP que se transmite desde el navegador al servidor.

    Si estas usando POST, probablemente lo estaras haciendo con un Submit de un <form>. En ese caso, agrega un input de tipo hidden dentro del form y copia en ese input la variable de javascript. Si al input tiene un name que sea, por ejemplo "abcd", entonces en el controlador define tu metodo de accion con un parametro que se llame abcd y le llegara ahi el valor del input.

    Si estas usando GET, concatena tu variable en la url, poniendo (por ejemplo) "...?abcd=valor" al final. Te llegara al metodo de accion a traves del parametro abcd igual que en el caso del POST.

    En tu codigo parece como si estuvieras intentando pasar la variable en el ViewBag. Esto no funciona, el ViewBag es unidireccional. Solo pasa del Controlador a la Vista en el lado servidor, pero no puede pasar al servidor desde el HTML resultante en el navegador depues de que el servidor haya renderizado la vista.

    lunes, 5 de febrero de 2018 12:33
  • como se si es get o post? donde estan esos metodos?

    lunes, 5 de febrero de 2018 12:59
  • estoy haciendo esto: codigo de la vista:

       <script type="text/javascript">
                             $("#codigoProvincia").change(changeTextboxes() );
                             var valor1 = $(this).val();
                             function changeTextboxes( ) {
                                                        @Html.Hidden("provin", Model.codigoProvincia)
                                 var provin = $(this).val();
                            
                                   }
                         </script>

    y el controller

    Function create(pozosSequia As Pozo, provin As String, boton As String) As ActionResult
                If boton IsNot Nothing Then
                    ViewBag.ViewMunicipio = db.ViewMunicipio.Where(Function(muni) muni.codigoProvincia = provin)

    lunes, 5 de febrero de 2018 13:42
  • hola

    >>provin no se como debo pasarla, deberia pasarla en la funcion create? con una @?

    el @ es razor y solo aplica en el render de la view, para asignar datos del servidor en el codigo cliente, pero no en sentido contrario

    para enviar datos al servidor deberias usar ajax, utilizando jquery

    Calling ASP MVC Controllers from jQuery Ajax

    la idea es usar $.ajax para invocar un action en el controller y enviar este dato desde el cliente sin que se refresque la pagina

    saludios


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 5 de febrero de 2018 14:55
  • Pero en ese codigo no se ve nada que haga un envío hacia el servidor. Es todo local en el cliente. ¿Qué tienes metido en la vista para que se transmita hacia el servidor? ¿Tienes un <form> con un botón de Submit? ¿Tienes algo de AJAX?
    lunes, 5 de febrero de 2018 17:14
  • como se si es get o post? donde estan esos metodos?

    Si el envio lo haces con un FORM, entonces esta en la propiedad "method" del FORM. Si el envio lo haces con AJAX, depende de la libreria que uses para el AJAX; si es jQuery depende de que hagas $.get o $.post (o es una propiedad si usas el $.ajax). Si lo que haces es un "navigate" entonces siempre es GET.

    Editado: Y si no has escrito expresamente ninguna de esas cosas, entonces no te llegara nada del navegador al servidor. Nunca podras recibir ninguna variable desde tu cliente hacia el controlador.

    lunes, 5 de febrero de 2018 17:18
  • >>Pero en ese codigo no se ve nada que haga un envío hacia el servidor. Es todo local en el cliente

    es verdad que el primer articulo solo muestra como desde el cliente invocas a un action que ya tendrias en el servidor, da por obvio que conoces como crear el action en el controller

    pero en el segundo link, veras que define algo como ser

    [HttpPost]
     public void Test01()
     {
       string notUsedString = "We got to Test01";
     }

    eso esta en el servidor

    y lo invocas desde el cliente con $.ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 5 de febrero de 2018 17:30
  • No, Leandro. Mi respuesta no era a tus enlaces, sino a la respuesta anterior de pit29 en la que mostraba el código que estaba usando. Márcale en el foro la opción de "Threaded list view" en lugar de "Flat list view", y así se ve a qué mensaje pertenece cada respuesta, en lugar de verse por orden cronológico.

    lunes, 5 de febrero de 2018 18:19
  • 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
    lunes, 5 de febrero de 2018 21:04