none
Usar Helper Ajax.BeginForm en MVC 1 RRS feed

  • Pregunta

  • Buen día, estoy buscando asesoria con respecto a un problema que se me ha presentado al usuar el helper Ajax.BeginForm de la versión mvc 1.

    Por cuestiones de configuración en los servidores de produccion no puedo publicar sition hechos con la version 3 del mvc, por lo cual me he visto en la necesidad de desarrollar los sistemas con la versión 1, con la version 3 no tengo ningun problema al usar el helper de ajax para crear los links y enviar los formularios, pero al usarlo en la version 1 no funciona del todo.

    Al enviar los datos a la accion de mi controlador se ejecuta normalmete pero en la propiedad OnSuccess donde le indicas las funcion callback que deseas ejecutar no la ejecuta, me envía el resultado en una pagina nueva sin ningun formato.

    mi pregunta es me hace falta especificar alguna otra propiedad o agregar codigo a mi accion en el controlador para que se pueda ejecutar dicha función.

    a continuación muestro los fragmentos de codigo para que los puedan analisar e indicarme en donde esta mi error.

    ***************************** Codigo Vista ******************************

    function datosCorrectos(data) {
            if ( typeof data.existeError != "undefined") {           
                cerrar();
                EjecutarActionLink('<%= Url.Action("Listado","Personal") %>', "GET", null, $("#divPrincipal"), null, false);
            }
            else {
                $("#divError").html(data);
            }
        }
    </script>

    <div id="divError"></div>
    <div id="modal"></div>
    <div>

    <% using (Ajax.BeginForm("Guardar", "Personal", new AjaxOptions { HttpMethod = "POST",  OnSuccess = "datosCorrectos" },new{@id="frmPersonal"})) {%>

    ..........

    <% } %>

    ***************************************************************

    *********************** Codigo Controlador ***********************

    [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Guardar(FormCollection form)
            {
                
                try
                {

                    ModeloPersonal per = new ModeloPersonal();
                    ca_personal newper = new ca_personal();
                    string opcion = form["CRUD"];
                    if (opcion == "E" || opcion == "D")
                        newper = per.PersonalById(Convert.ToInt16(form["Id_Personal"]));
                    TryUpdateModel(newper); //Actualizamos los datos
                    switch (opcion)
                    {
                        case "I": //Insertar                               
                            FuncionesAcceso.PermitirAcceso(appUsuario, FuncionesAcceso.Modulos.Personal, FuncionesAcceso.Opciones.Insertar);
                            newper.ReglasDeNegocio();
                            newper.U_Act = appUsuario.DatosUsuario.Id_Usuario;
                            newper.F_Act = DateTime.Now;
                            if (!appUsuario.EsAdministrador)
                                newper.Id_Dpcia = appUsuario.DatosUsuario.ca_personal.Id_Dpcia;
                            per.NuevoRegistro(newper);
                            break;
                        case "E": //Editar
                            FuncionesAcceso.PermitirAcceso(appUsuario, FuncionesAcceso.Modulos.Personal, FuncionesAcceso.Opciones.Editar);
                            newper.ReglasDeNegocio();
                            newper.U_Act = appUsuario.DatosUsuario.Id_Usuario;
                            newper.F_Act = DateTime.Now;
                            if (!appUsuario.EsAdministrador)
                                newper.Id_Dpcia = appUsuario.DatosUsuario.ca_personal.Id_Dpcia;
                            per.EditarPersonal(newper);
                            break;
                        case "D": //Eliminar
                            FuncionesAcceso.PermitirAcceso(appUsuario, FuncionesAcceso.Modulos.Personal, FuncionesAcceso.Opciones.Eliminar);
                            newper.ReglasDeNegocioBorrar();
                            per.Eliminar(newper);
                            break;
                    }
                  
                        return Json(new JsonError(false, ""));
                 
                }
                catch (HLBException ex)
                {             
                        return PartialView("Mensaje", new msgInfo(msgInfo.tipoMsg.Error, msgInfo.Icono.Grande, appMensaje.RecuperarDescripcion(ex), true));              
                }
                catch (Exception ex)
                {             
                        appMensaje.RegistrarLogErrores(ex);
                        return PartialView("Mensaje", new msgInfo(msgInfo.tipoMsg.Error, msgInfo.Icono.Grande, appMensaje.RecuperarDescripcion("B0000"), true));
                 
                }
            }

    ********************************************

    Explico brevemente el codigo:

    Una ves que el usuario ha llenado el fomulario, se envia al controlador.

    el controlador hace las acciones necesarias para guardar el registro en la base de datos

    si todo ha salido bien envio un json con la propiedad existe error en false,

    en la vista evaluo si esta propiedad existe, si existe es que todo va bien, cierro la ventana modal y actualizo la tabla donde muestro los datos con la función EjecutarActionLink(Funcion Propia)

    en caso de que no exista le muestro el error que ocurrio durante la ejecucion de la accion en el controlador.

    A mi parecer creo tener correctamente formada la instrucción Ajax.BeginForm, pero al terminar de ejecutarse no entra a la funcion datosCorrectos, es por eso que les pido su ayuda para poder solucionar el problema, ya que este helper me ha sido de gran ayuda en mis desarrollos con la version 3.

    de antemano muchas gracias y agradecer cualquier ayuda.

    Saludos!!.

    viernes, 1 de marzo de 2013 17:56

Respuestas

  • Que tal amigo, he visto el codigo pero sigue sin funcionar, creo que voy a implementar el envio de los datos a traves de ajax, para mantener la funcionalidad ya implementada en el sistema.

    es lo malo de hacer un downgrade de versiones jejeje.

    te agradezco tu apoyo.

    Saludos

    • Marcado como respuesta Jose A Mtz martes, 5 de marzo de 2013 18:54
    martes, 5 de marzo de 2013 18:54

Todas las respuestas

  • Muy buenas

    Jose_Mtz, puedes poder el codigo de la funcion datosCorrectos ???, para que te ayudemos mejor

    Saludos


    Juan Gómez

    viernes, 1 de marzo de 2013 19:35
  • Que tal Juan C. esa funcion esta en la seccion que pude de codigo de Vista

    viernes, 1 de marzo de 2013 20:06
  • Muy buenas

    Jose_Mtz, porque no prueba en poner algo a si en tu controlador:

    return Json ("OK", JsonRequestBehavior.AllowGet);

    Y en tu funcion JS puedes poner algo asi como esto:

    if(data == 'OK'){

    alert('Todo Bien...');

    }

    else{

    alert('Todo Mal...');

    }

    Saludos


    Juan Gómez


    • Editado Juan C. Gómez viernes, 1 de marzo de 2013 20:51 Corrreccion...
    viernes, 1 de marzo de 2013 20:50
  • Un saludo Juan C., estaba checando el código que posteaste, efectivamente es correcto el codigo, pero ahorita lo estoy buscando para que funcione en la version de MVC 1, asi es como lo tengo implementado en los desarrollos que tengo con la version 3 pero lo raro es que con la version 1 no funciona., la funcion que se define en la propiedad onSuccess del helper Ajax.BeginForm no se ejecuta

    una posible solucion seria enviarlo atraves de ajax de jquery, pero pues no me gustaria estar repitiendo el codigo de submit en cada uno de los forms que valla a necesitar.

    Estoy pensando que sea incompatible con la version 1.

    Te agradezco tus comentarios amigo.

    viernes, 1 de marzo de 2013 21:51
  • Muy buenas

    Jose A Mtz, otra alternativa seria algo así:

    //EN EL CONTROLADOR

    return Content ("Algun_Mensaje");

    // EN TU FUNCION JS

    function datosCorrectos(data) {
            if (data == 'Ok' ) {            
                cerrar();
            }
            else {
                $("#divError").html(data);
            }
        }

    //RECOMENDACION

    Te recomiendo que utilices Google Chrome al momento de probar tu aplicación antes de enviar los datos al controlador te recomiendo que hagas los siguiente:

    • Click derecho en cualquier parte de la pagina.
    • Seleccionar Inspeccionar elemento.
    • Te vas a la pestaña de Network, si el post resulto mal en esta parte lo puedes mirar y si el error es en el js en la parte inferior derecha del navegador de aparecera un número en color rojo el cual te dira cual es el error en el js.

    Saludos


    Juan Gómez

    • Editado Juan C. Gómez domingo, 3 de marzo de 2013 1:18 Se agregaron recomendaciones...
    domingo, 3 de marzo de 2013 1:13
  • Que tal amigo, he visto el codigo pero sigue sin funcionar, creo que voy a implementar el envio de los datos a traves de ajax, para mantener la funcionalidad ya implementada en el sistema.

    es lo malo de hacer un downgrade de versiones jejeje.

    te agradezco tu apoyo.

    Saludos

    • Marcado como respuesta Jose A Mtz martes, 5 de marzo de 2013 18:54
    martes, 5 de marzo de 2013 18:54