entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Llamar a función en 'code behind' con AJAX en ASP.NET WebForms

Buenas,

estoy haciendo una web y quiero llamar desde una función en javascript a un método de la clase de la página .aspx, pero me da un error diciendo que no se encuentra. Me explico:

Tengo esta función en javascript:

        function ImprimirFichaBolo() {

            //Cojo todos los datos del formulario, y los cargo en las variables que paso como JSON

            $.ajax({
                type: "POST",
                url: "Bolos.aspx/ImprimirFichaBolo",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: {
                    compañia: compañia,
                    espectaculo: espectaculo,
                    localidad: localidad,
                    fecha: fecha,
                    lugar: lugar,
                    horario: horario,
                    llegada: llegada,
                    contacto: contacto,
                    observaciones: observaciones,
                },
                success: function (data) {
                    $('#divCarga').hide();
                },
                error: function (data) {
                    $('#divCarga').hide();
                }
            }
    );

Entonces en la página Bolos.aspx.cs tengo el siguiente código:

public void ImprimirFichaBolo(object sender, EventArgs e)
{
    var compañia = ddlCompañias.SelectedItem.Text;
    var actividad = detESPECTACULO.Text;
    var municipio = detLOCALIDAD.Text;
    var fecha = detFECHA.Text;
    var lugar = detLUGAR.Text;
    var horario = detHORARIO.Text;
    var llegada = detLLEGADA.Text;
    var contacto = detCONTACTO.Text;
    var observaciones = detOBSERVACIONES.Text;

    var DS = new fBoloDataSet();

    DS.BOLOS.Rows.Add(compañia, actividad, municipio, fecha, lugar, horario, llegada, contacto, observaciones);
}

Pero cuando apreto el botón, a través del debugger de chrome, veo que entro en la función javascript, y cuando voy a llamar a la funcion con Ajax, me sale el siguiente error en el console de chrome.

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost:49927/Views/Bolos.aspx/ImprimirFichaBolo

Supongo que algo estaré haciendo mal, pero no consigo ver el que... alguien tiene alguna idea??

Gracias de antemano,

2 Respuestas

5votos

daniel_uribe_ayvar Puntos2770

Coloca en la parte superior de tu método lo siguiente

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]

y declara tu método como estático

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public static void ImprimirFichaBolo(object sender, EventArgs e){

1voto

alex_alvarez Puntos2160

Al final lo he solucionado añadiendo el [WebMethod]y haciéndolo estático tal y como dices, luego he corregido como estaba envíando el JSON, que tenía un error, y ahora funciona perfectamente, queda así:

    $.ajax({
        type: "POST",
        url: "Bolos.aspx/ImprimirFichaBolo",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: "{'compañia':" + JSON.stringify(compañia) + ",'actividad':" + JSON.stringify(actividad) + ",'municipio':" + JSON.stringify(municipio) +
        ",'fecha':" + JSON.stringify(fecha) + ",'lugar':" + JSON.stringify(lugar) + ",'horario':" + JSON.stringify(horario) + 
        ",'llegada':" + JSON.stringify(llegada) + ",'contacto':" + JSON.stringify(contacto) + ",'observaciones':" + JSON.stringify(observaciones) + "}",

        success: function (data) {
            $('#divCarga').hide();
        },
        error: function (data) {
            $('#divCarga').hide();
        }
    }

);

Gracias por tu respuesta :)

0voto

daniel_uribe_ayvar comentado

De nada, solamente te agradecería marcar como solucionada tu pregunta. Saludos ;)

0voto

defaultUser comentado

creo q deberias haber marcado la respuesta de daniel_uribe_ayvar como correcta

0voto

alex_alvarez comentado

Hecho, tienes razón, al inicio no lo había hecho, ya que lo descubrí antes de ver la respuesta, pero como bien dices, su respuesta es la correcta y así debe estar marcada, disculpar y gracias :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta