none
Sigo sin poder ejecutar WebMethod desde jQuery RRS feed

  • Pregunta

  • De nuevo, hago la pregunta, estoy aprendiendo ASP.NET en C# , empiezo a dudar de seguir con este lenguaje porque me esta costando conseguir información en internet de mi problema que no me permite continuar, pero intento de nuevo.

    Ya había preguntado aquí respecto a que no me permite tener respuesta de un Webmethod llamándolo desde un web form con jquery / json, los amables consejos no me sirvieron porque no me funciono, ahora vuelvo con otra rutina en jquery, se las expongo.

    Antes, quiero comentar que en mi solución cree otro proyecto Web ,pero con el Framework 3.5, ya que la solución y todo lo hice con Framework 4.5 y me funciona perfectamente en 3.5.

    El ejemplo siguiente que lo tome en una página de la web, me funciona perfectamente con Framework 3.5 , pero no en el 4.5 lo desarrollo en VS2013, es curioso para mi.

            $(function () {
                $('#btnSumar').click(function () {
                    var num1 = $('#num1').val(); //Obtenemos el primer número
                    var num2 = $('#num2').val(); //Obtenemos el segundo número
                    $.ajax({
                        //Tipo de llamada
                        type: "POST",
                        //Dirección del WebMethod, o sea, Página.aspx/Método
                        // url: "http://localhost:39507/Mantenimientos/Bodegas2.aspx/Sumar",
                        url: "Bodegas2.aspx/Sumar",
                        
                        //Parámetros para pasarle al método 
                        data: '{Valor1: ' + num1 + ', Valor2: ' + num2 + '}',
    
                        //Tipo de contenido
                        contentType: "application/json; charset=utf-8",
    
                        //Tipo de datos
                        dataType: "json",
    
                        //Función a la cual llamar cuando se pudo llamar satisfactoriamente al método
                        success: resultado,
    
                        //Función a la cual llamar cuando se producen errores
                        error: errores
                        
                    });
                });
            });

    en el .cs

            [WebMethod]
            public static double Sumar(double Valor1, double Valor2)
            {
                return Valor1 + Valor2;
            }

    en el web form tengo tres textbox 2 para pedir las cantidades y uno mas para el resultado un botón con el caption de "=" que es el que envia a consumir el webmethod.

    en pruebas pongo un alert(data.d) para mostrar lo que trae el objeto y este me manda "undefined",

    presiono F12 para revisar la consola y me envia el siguiente mensaje:

    Object {Message: "Error de autenticación.", StackTrace: null, ExceptionType: "System.InvalidOperationException"}

    Como les comento, en un proyecto desarrollado con FrameWork 3.5 , me funciona perfectamente.

    Normalmente lo ejecuto directamente con Ctrl+May+W, osea directamente, pero también lo probé ejecutando toda la solución donde estoy logueado.

    Agradezco sus comentarios.

    martes, 28 de abril de 2015 19:59

Respuestas

  • Hola amigo, lo que necsitas es comentar dentro de la Clase RouteConfig.cs la linea:

    settings.AutoRedirectMode = RedirectMode.Permanent;

    • Propuesto como respuesta Kaysinho lunes, 5 de septiembre de 2016 3:15
    • Marcado como respuesta Sergio ParraModerator martes, 16 de mayo de 2017 12:11
    jueves, 7 de enero de 2016 18:50
  • hola

    >>puse las mismas rutinas, en el aspx y cs

    que mismas rutinas ? la idea no era copiar la funcionalidad del ejemplo que no te funciona, la idea es crear algo de cero sin copiar nada de ningun lado, sino pasas los vicios y problemas que ya tenias

    la idea era definir un proyecto nuevo en .net 4.5, creas una pagina y defines un webmethod que recibe y envia un string simple

    luego desde esa misma pagina (la cual esta vacia) defines el <script> con la invocacion al webmethod mediante ajax

    eso es todo lo que necesitas para validar el funcionamiento

    Nota: en el sitio y la pagina agregas la referencia a jquery

    Nota2: recuerda al crear el proyecto seleccionarlo en blanco, no uses ningun template base que pudiera agregar codigo de seguridad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de abril de 2015 16:32

Todas las respuestas

  • hola

    >>Object {Message: "Error de autenticación.", StackTrace: null, ExceptionType: "System.InvalidOperationException"}

    este mensaje donde lo recibes? cuando ingresa al webmethod o en el error de $.ajax

    por lo que entiendo el F12 lo presionas en el browser

    implementas en el sitio seguridad de asp.net membership ?

    ----

    algo que tambien veo es que defines mal los parametro, intenta usar

    $(function () {
    	$('#btnSumar').click(function () {
    		
    		var params = {
    			Valor1 : $('#num1').val(),
    			Valor2 : $('#num2').val()
    		};
    		
    		$.ajax({
    			type: "POST",
    			url: "Bodegas2.aspx/Sumar",
    			
    			data: JSON.stringify(params),
    			.
    			.

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 28 de abril de 2015 20:11
  • prueba de esta manera

    $(function () { $('#btnSumar').click(function () { $.ajax({ //Tipo de llamada type: "POST", //Dirección del WebMethod, o sea, Página.aspx/Método url: "http://localhost:39507/Mantenimientos/Bodegas2.aspx/Sumar", //Parámetros para pasarle al método

    data: '{"Valor1": "' + $("#<%=num1.ClientID%>").val() +
                                '", "Valor2": "' + $("#<%=num2.ClientID%>").val() + '"}',

    //Tipo de contenido contentType: "application/json; charset=utf-8", //Tipo de datos dataType: "json", //Función a la cual llamar cuando se pudo llamar satisfactoriamente al método success: resultado, //Función a la cual llamar cuando se producen errores error: errores }); }); });

    y el WebMethod modicarlo a string los parametros tengo problemas con los parametros numerico

    [WebMethod] public static double Sumar(string Valor1, string Valor2) {

    double result=0;

    result=Convert.Todouble(Valor1) + Convert.Todouble(Valor2); return result; }


    ProgramacionYa.net
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense

    martes, 28 de abril de 2015 20:50
  • decirte que pruebes esto en tu parte sucess de tu código jquery

    success: function (data) {
                    if (data.hasOwnProperty("d"))
                        alert(data.d);
                    else
                        alert(data);

                }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    martes, 28 de abril de 2015 21:27
    Moderador
  • Gracias Sergio, efectivamente puse lo que me indicas y me envia en el Alert que es un Object.

    Eso ya lo había visto, lo que se esta ejecutando es el segundo ALERT , seguramente si se lanzara el primer Object, es cuando me indicaría "undefined", te lo comento, porque he puesto el alert de esa forma.

    Algo mas que pudiera ser ?

    martes, 28 de abril de 2015 22:55
  • Disculpa desde que pongo el código que me pasa, desde ahí marca error, y al ejecutarlo, es lo primero que marca el error la línea que agrego de la siguiente forma.

                    $.ajax({
                        //Tipo de llamada
                        type: "POST",
    
                        //Dirección del WebMethod, o sea, Página.aspx/Método
                        // url: "http://localhost:39507/Mantenimientos/Bodegas2.aspx/Sumar",
                        url: "Bodegas2.aspx/Sumar",
                        
                        //Parámetros para pasarle al método 
                        // data: '{Valor1: ' + num1 + ', Valor2: ' + num2 + '}',
    
                        data: '{"Valor1": "' + $("#<%=num1.ClientID%>").val() +
                                                    '", "Valor2": "' + $("#<%=num2.ClientID%>").val() + '"}',
    
                        //Tipo de contenido
                        contentType: "application/json; charset=utf-8",

    Lo que no entiendo porque en Framework 3.5 y no en 4.5

    martes, 28 de abril de 2015 22:58
  • Hola Leandro, en alguna ocasión me habías pedido que al presionara F12 en el browser para ver lo que enviaba el "Console"

    Efectivamente así lo hago, entro al web form, en el browser presiono F12, ingreso los datos al momento de presionar el botón para ejecutar la suma osea el consumo del Webmethod, supongo que regresa y me marca el mensaje en la sección de "Console" el mensaje que puse en mi pregunta.

    Cambie la forma que me indicas, pero no uno ningún cambio, al contrario, no envio ningún mensaje, ningún resultado.

    Lo curioso es que en Framework si funciona exactamente como esta, pero con el framework 4.5 no.

    La parte de Membership , no la de desarrolle, precisamente el curso esta en VS2012 y yo tengo el VS2013, a ellos con VS2012, todo funciona a la perfección, menos conmigo y claro  VS2013 maneja diferente la parte del Membership.

    Honestamente, pensé que con un lenguaje mas nuevo del que he manejado por muchos años, tendría mas ventajas, pero veo que es mas difícil, llevo casi 10 días sin poder avanzar en el curso, por esta situación, en todo lo que desarrolle nunca funciono jquery/json, suponmgo que jquery si, por los mensajitos bonitos. Por mas que he buscado, no hay solución mas que regresarme a VS 2012, por lo que veo.

    martes, 28 de abril de 2015 23:11
  • >>La parte de Membership , no la de desarrolle

    ok no la desarrollaste, pero esta configurada ? o sea el desarrollo usa asp.net membership para implementar seguridad

    >>llevo casi 10 días sin poder avanzar en el curso, por esta situación,

    no intentaste hacer algo de cero, nuevo proyecto, pagina aspx simple y un webmethod para validar que funcione con .net 4.5

    porque el problema no es .net ajax etc sino ese ejemplo que usas de base que aplica seguridad que no entiendes como esta implementada

    >>no hay solución mas que regresarme a VS 2012,

    no tiene nada que ver la version del VS, sino que algo pasa con ese ejemplo en concreto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de abril de 2015 23:23
  • Ahora si con mas pruebas.

    Cree un nuevo proyecto con FM 4.0 , puse las mismas rutinas, en el aspx y cs, ---> Funciono Perfecto

    Cree un nuevo proyecto en fm 4.5 , hice exactamente lo mismo y no funcionó.

    En este mismo FM 4.5 agregue un web Form, nuevo y otro como pagina de contenido Site.master, en ninguno de los 2 casos funciona, si pongo el Alert(msg.d) me dice que es "undefined", si pongo alert(msg) , me dice que es un objeto, en todos los casos se supone que pasa por el Webmethod, aun que pongo punto de interrupción en el metódo y no se interrumpe.

    Veo el curso que estoy tomando y veo que esta hecho en FM 4.5 con vs 2012.

    Cabe mencionar que no le muevo nada a la rutina, salvo las url cuando creo los nuevos web forms para indicarle el nombre del nuevo web form.

    Pero igual dudo que sean los FM's de distintas versiones.

    Lo me membership , no lo desarrolle por que el FM 4.5 tengo entendido que es con asp.net indentity. y este por lo pronto no está en el curso.

    Pero ahí están las pruebas en ambos casos, no toque mi proyecto que ya vengo desarrollando.

    ni en stackoverflow he encontrado solución, aunque no he hecho preguntas ahí.

    Sigo esperando su apoyo, gracias.

    miércoles, 29 de abril de 2015 2:51
  • Esto me funciona ami , sin problemas trata de acomodarlo a lo tuyo , en el mismo orden


    $("#<%=BtnGrabar.ClientID%>").click(function () {
                          $.ajax({
                            type: "POST",
                            datatype: "json",
                            contentType: "application/json;charset=utf-8",
                            url: 'http://localhost/Nominet/ws.asmx/Grabar',
                            data: '{"IDDepartamento": "' + $("#<%=TxtIDDepartamento.ClientID%>").val() +
                                '", "Departamento": "' + $("#<%=TxtDepartamento.ClientID%>").val() + '"}',
                            success: function (response) {
                                if(response.d === true)
                                {
                                        alert("Registro Insertado/Actualizado Satisfactoriamente");
                                }
                                else
                                {
                                    alert("Error al Insertar/Actualizar");
                                }
                            },
                            error: function (xhr, textsatus, error) {
                                alert("ERROR==>" + error);
                            }
                        })
                        //alert("Presiono Enter");
                 }); 



    y Este es el WebMethod y lo tengo en un webservice separado, algo debes de estar haciendo malo


            [WebMethod]
            public bool Grabar (string IDDepartamento, string Departamento)
            {
                bool resultado = false;
                try
                {
                    DepartamentoEntidades oDepartamento = new DepartamentoEntidades();
                    oDepartamento.IDDepartamento = Convert.ToInt32(IDDepartamento);
                    oDepartamento.Departamento = Departamento;
                    resultado = DepartamentoBLL.Grabar(oDepartamento);
                }
                catch (Exception)
                {

                }
                return resultado;
            }





    Y  Aqui esta el resultado



    ProgramacionYa.net
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense

    miércoles, 29 de abril de 2015 3:46
  •  A excepcion      if(response.d === true) seria poner la condicion Mayor que cero, ya que tu funcion regresa numero,

    perdon prueba asi

    var resultado = eval('(' + response.d + ')');

      if(resultado> 0) 

    SLDS


    ProgramacionYa.net
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense


    miércoles, 29 de abril de 2015 3:51
  • para descartar una cosa... Dices que te funciona con Frk4.0 y con el 4.5 no. La versión de los,archivos de jquery son diferentes?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 29 de abril de 2015 4:07
    Moderador
  • Sergio, en el proyecto son diferentes, te explico como lo tengo.

    En la carpeta "script" del proyecto que no funciona Frk 4.5  esta :jquery-2.1.3.js entre otros archivos.

    En la carpeta "script" del proyecto que SI funciona Frk 4.0  esta :jquery-1.8.2.js entre otros archivos.

    Aun que en todos los web forms que pruebo, ambos proyectos (Frk) es lo siguiente:

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js" type="text/javascript"></script>
    

    Lo que si noto de diferente, es el Bootstrap se incluye en el Frk 4.5 y no en el 4.

    miércoles, 29 de abril de 2015 13:48
  • Te agradezco , intentare adaptarlo, aunque en una simple SUMA, lo que veo que no me llega resultado, pienso que no tendre éxito con esta rutina que amablemente me proporcionas, pero lo intentare. gracias.
    miércoles, 29 de abril de 2015 13:49
  • Quite los script del proyecto Frk 4.5 y puse los del proyecto de Frk 4.0 y sigui lo mismo, aunque en los web forms, no veo que los invoque.
    miércoles, 29 de abril de 2015 16:07
  • hola

    >>puse las mismas rutinas, en el aspx y cs

    que mismas rutinas ? la idea no era copiar la funcionalidad del ejemplo que no te funciona, la idea es crear algo de cero sin copiar nada de ningun lado, sino pasas los vicios y problemas que ya tenias

    la idea era definir un proyecto nuevo en .net 4.5, creas una pagina y defines un webmethod que recibe y envia un string simple

    luego desde esa misma pagina (la cual esta vacia) defines el <script> con la invocacion al webmethod mediante ajax

    eso es todo lo que necesitas para validar el funcionamiento

    Nota: en el sitio y la pagina agregas la referencia a jquery

    Nota2: recuerda al crear el proyecto seleccionarlo en blanco, no uses ningun template base que pudiera agregar codigo de seguridad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de abril de 2015 16:32
  • Muy bien Leandro, hare lo que me aconsejas y lo comento, gracias.

    miércoles, 29 de abril de 2015 19:49
  • Hola amigo, lo que necsitas es comentar dentro de la Clase RouteConfig.cs la linea:

    settings.AutoRedirectMode = RedirectMode.Permanent;

    • Propuesto como respuesta Kaysinho lunes, 5 de septiembre de 2016 3:15
    • Marcado como respuesta Sergio ParraModerator martes, 16 de mayo de 2017 12:11
    jueves, 7 de enero de 2016 18:50
  • de 10 tu respuesta
    jueves, 17 de noviembre de 2016 15:55
  • Muchas gracias a todos por su ayuda.
    jueves, 17 de noviembre de 2016 17:13
  • Hola amigo, lo que necsitas es comentar dentro de la Clase RouteConfig.cs la linea:

    settings.AutoRedirectMode = RedirectMode.Permanent;

    Estas son las respuestas productivas que agregan valor a las comunidades, no como las de Leandro  y otros que solo se hacen para llenar esta comunidad de palabras e ir ganando puntos en el sistema de puntajes.

    Te recuerdo que salvo que seas uno de los desarrolladores que trabaja en el codigo del proyecto visual studio, tu comentario esta fuera de lugar

    Muchas gracias francisco, tu respuesta soluciono mi problema.

     
    martes, 16 de mayo de 2017 11:40
  • hola sGermosen24.

    Para mí,  tu comentario está fuera de lugar. No creo que nadie que colabore con el foro lo haga por el sistema de puntos. Pienso que la gente tiene ganas de ayudar y compartir su conocimiento y experiencia. Muchas gracias por tu atención.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 16 de mayo de 2017 12:23
    Moderador
  • Amigo eres genial, tu aporte me ayudó a solucionar mi problema y el de muchos más.
    lunes, 12 de marzo de 2018 15:54