none
Validación en llamada Ajax. RRS feed

  • Pregunta

  • Buenos días,

    Estoy desarrollando una aplicación en MVC con C#.

    En una de mis vistas, tengo varios campos, 2 necesarios para calcular la tasa efectiva.

    También tengo un botón que realiza la llamada ajax que va al server a ejecutar el método que realiza el cálculo.

    La cuestión es que quiero que esa llamada ajax valide si ese 2 campos necesarios están llenos.

    Esta es mi llamada ajax:

    function calcularTasaEfectiva(tasaNominal, idFrecuenciaPago) {
    
        window.prestamo = window.prestamo || {};
        var me = window.prestamo;
        
        var params = {
            tasaNominal: tasaNominal,
            idFrecuenciaPago: idFrecuenciaPago
        };
    
        $.ajax({
            url: me.calcularTasaEfectivaUrl,
            data: params,
            type: 'GET',
            success: function (datos) {
    
                $('#txtTasaEfectiva').val(datos);
            },
        });
    }

    Hay alguna forma de realizar las validaciones en la llamada ajax?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    martes, 21 de junio de 2016 16:01

Respuestas

  • >>quiero que ese campo solamente me valide esos 2 campos que tienen que ver con la tasa efectiva.

    no lo puedo asegurar al 100%, pero hasta donde se se podria validar solo algun campo

    sino bueno vas a tener que validar especificamente esos campos

    function calcularTasaEfectiva(tasaNominal, idFrecuenciaPago) {
    
        window.prestamo = window.prestamo || {};
        var me = window.prestamo;
    	
    	if(tasaNominal == ''){
    		//aqui muestras el mensaje de error
    		$('#divId').html('la tasa es requerida');
    	}
    	if(idFrecuenciaPago == ''){
    		//aqui muestras el mensaje de error
    		$('#divId').html('la frecuencia es requerida');
    	}
        
        var params = {
            tasaNominal: tasaNominal,
            idFrecuenciaPago: idFrecuenciaPago
        };
    
        $.ajax({
            url: me.calcularTasaEfectivaUrl,
            data: params,
            type: 'GET',
            success: function (datos) {
    
                $('#txtTasaEfectiva').val(datos);
            },
        });
    }

    en el ejemplo use jquery

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Willams Morales martes, 21 de junio de 2016 17:13
    • Marcado como respuesta Carlos Márquez miércoles, 22 de junio de 2016 17:32
    martes, 21 de junio de 2016 17:09
  • En lo personal, yo insisto que la validación que propone Leandro se haga en el evento llamador de la función calcularTasaEfectiva() (evento Click del botón), ya que no tiene sentido llamar a una función si los argumentos no son válidos.
    • Marcado como respuesta Carlos Márquez miércoles, 22 de junio de 2016 17:32
    martes, 21 de junio de 2016 17:15

Todas las respuestas

  • Carlos Márquez,

    No deberías dejar la validación de los campos a AJAX, valida por la existencia de valor en los input de tipo 'textbox' cuando ingresas al evento Click del botón y sólo cuando ambos controles contienen valor invocas a la función calcularTasaEfectiva().

    martes, 21 de junio de 2016 16:07
  • hola

    >>Hay alguna forma de realizar las validaciones en la llamada ajax?

    es que esa validacion la realizas previa a la llamada ajax usando javascript

    es mas si usas Data Annotations para las validaciones de los campos, o sea usar el [Required] en el model de la view podrias desde javascript lanzas estas validaciones y verificar si pasan o no para luego invocar el $.ajax (si es que pasaron correctamente)

    Call MVC 3 Client Side Validation Manually for ajax posts

    de esta forma no tienes que escribir validaciones especiales, sino que usas las mismas que asp.net mvc define como atributo el model

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 21 de junio de 2016 16:42
  • Hola, Willam/Tuttini.

    Leandro, sí uso data annotations pero lo que pasa es que de esa forma al presionar el botón 'Calcular' me validaría todo el el modelo y quiero que ese campo solamente me valide esos 2 campos que tienen que ver con la tasa efectiva.

    Ese mensaje que quiero mostrar para las validaciones, es posible mostrarlo en un ViewBag o deberia de ser en otro control?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    martes, 21 de junio de 2016 16:47
  • >>quiero que ese campo solamente me valide esos 2 campos que tienen que ver con la tasa efectiva.

    no lo puedo asegurar al 100%, pero hasta donde se se podria validar solo algun campo

    sino bueno vas a tener que validar especificamente esos campos

    function calcularTasaEfectiva(tasaNominal, idFrecuenciaPago) {
    
        window.prestamo = window.prestamo || {};
        var me = window.prestamo;
    	
    	if(tasaNominal == ''){
    		//aqui muestras el mensaje de error
    		$('#divId').html('la tasa es requerida');
    	}
    	if(idFrecuenciaPago == ''){
    		//aqui muestras el mensaje de error
    		$('#divId').html('la frecuencia es requerida');
    	}
        
        var params = {
            tasaNominal: tasaNominal,
            idFrecuenciaPago: idFrecuenciaPago
        };
    
        $.ajax({
            url: me.calcularTasaEfectivaUrl,
            data: params,
            type: 'GET',
            success: function (datos) {
    
                $('#txtTasaEfectiva').val(datos);
            },
        });
    }

    en el ejemplo use jquery

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Willams Morales martes, 21 de junio de 2016 17:13
    • Marcado como respuesta Carlos Márquez miércoles, 22 de junio de 2016 17:32
    martes, 21 de junio de 2016 17:09
  • En lo personal, yo insisto que la validación que propone Leandro se haga en el evento llamador de la función calcularTasaEfectiva() (evento Click del botón), ya que no tiene sentido llamar a una función si los argumentos no son válidos.
    • Marcado como respuesta Carlos Márquez miércoles, 22 de junio de 2016 17:32
    martes, 21 de junio de 2016 17:15
  • Hola,

    tomando en cuenta lo que dice Willams, ha quedado así:

     $('#btnCalcular').click(function () {
    
            var tasaNominal = $("#txtTasaNominal").val();
            var idFrecuenciaPago = $("#ddlFrecuenciaPago").val();
    
            if(validacionesTasaEfectiva(tasaNominal,idFrecuenciaPago))
                calcularTasaEfectiva(tasaNominal,idFrecuenciaPago);
        })

    function validacionesTasaEfectiva(tasaNominal, idFrecuenciaPago) {
    
        var bandera = false;
        
        $('#mensajeErr').html('');
    
        if (tasaNominal == "" || idFrecuenciaPago == "") {
    
            $('#mensajeErr').html('Uno o más campos son requeridos para el cálculo.');
        }
        else if (!(!isNaN(parseFloat(tasaNominal)) && isFinite(tasaNominal))) {
            $('#mensajeErr').html('La tasa nominal debe de ser de tipo decimal.');
        }
        else
            bandera = true;
    
        return bandera;
    }

    Sólo me ha quedado una duda, esa forma de validar el decimal, es la correcta en javascript?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    martes, 21 de junio de 2016 20:15