Jquery Ajax и веб-метод asp.net

Я пытаюсь вызвать веб-метод на странице aspx, используя jquery ajax. Код ajax вызывает страницу, но я не могу перейти к методу, хотя Page_Load был получен после запроса ajax Post. Я пробовал разными способами, но не могу.

Я надеюсь, что вы можете мне помочь, я схожу с ума.

    protected void Page_Load(object sender, EventArgs e)
    {
        string nombre = Request.QueryString["nombre"];
        if (!IsPostBack)
        {
            this.CargarDatosIniciales();                  
        }
    }

    [WebMethod(enableSession:true)]
    [ScriptMethod()]
    public static void GuardarDatosFamilia(string nombre, string tipoDoc)
    {
        string nombrePersona = nombre;
        string tipoDocumento = tipoDoc;
    }


    $.ajax({
        type: "POST",
        url: "FRM_Caracterizacion.aspx/GuardarDatosFamilia", //Direccion del servicio web segido de /Nombre del metodo a llamar
        beforeSend: function () { alert('I am sending'); },
        data: "{'nombre':'"+ nombre+"','tipoDoc':'"+ tipoDoc"'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json" 
        });

ОБНОВИТЬ:

Вот что я получаю в Firebug:

     POST http://localhost:51620/FRM_Caracterizacion.aspx/GuardarDatosFamilia 200 OK    3.22s

     Parámetros application/x-www-form-urlencoded
     nombre Jhon Fredy
     tipoDoc    1
     Fuente
     nombre=Jhon+Fredy&tipoDoc=1

ОБНОВЛЕНИЕ 2:

РЕШЕНИЕ

Что я сделал для моей конкретной проблемы:

     $.ajax({
        type: "POST",
        url: "FRM_Caracterizacion.aspx", //Direccion del servicio web segido de /Nombre del metodo a llamar
        beforeSend: function () { alert('I am sending'); },
        data: { metodo: 'AgregarDatosFamilia',
        nombre:nombre,
        tipoDoc:tipoDoc
        },
        dataType: "json" //Esto quiere decir que los datos nos llegaran como un objeto json
    });


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request.Form["metodo"] == "AgregarDatosFamilia")
            {
                this.GuardarDatosFamilia();
            }
            this.CargarDatosIniciales();                  
        }
    }

    public void GuardarDatosFamilia()
    {
        string nombre = Request.Form["nombre"].ToString(),
        string tipoDoc = Request.Form["tipoDoc"].ToString()
    }

Спасибо всем, я ценю предложения!


person jisazat    schedule 08.11.2012    source источник
comment
У вас установлен Fiddler? он покажет вам, что происходит по сети, и любой текст исключения, который может быть выдан средой выполнения .NET до того, как ваш веб-метод нажмет   -  person akatakritos    schedule 08.11.2012
comment
Что ты пытаешься сделать? вы ничего не возвращаете из веб-службы и ничего не делаете после успешного вызова ajax.   -  person Sen Jacob    schedule 08.11.2012
comment
Что вы получаете в ответ, 500 внутренняя ошибка сервера?   -  person Sen Jacob    schedule 08.11.2012
comment
Привет, извините, если я не был так ясен. Я не очень хорошо говорю по-английски. На самом деле я отлаживал, используя точки останова Firebug и Visual Studio. После вызова метода ajax он переходит на страницу aspx и выполняет загрузку страницы, он не показывает никаких исключений, но не входит в метод. Я ясно выражаюсь? Извините за мой английский.   -  person jisazat    schedule 08.11.2012


Ответы (2)


убедитесь, что вы правильно вызываете это на стороне клиента

  $.ajax({
        type: "POST",
        url: "FRM_Caracterizacion.aspx/GuardarDatosFamilia", //Direccion del servicio web segido de /Nombre del metodo a llamar
        beforeSend: function () { alert('I am sending'); },
        data: "{'nombre':'"+ nombre+"','tipoDoc':'"+ tipoDoc"'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json" 
        });

затем в браузере нажмите F12 и посмотрите трафик - вы увидите, что вызывается веб-метод, но вы ничего не возвращаете,

[WebMethod(enableSession:true)]
[ScriptMethod()]  //this can't be void - change to String
public static String GuardarDatosFamilia(string nombre, string tipoDoc)
{
    string nombrePersona = nombre;
    string tipoDocumento = tipoDoc;
    return "successful ajax";
}

попробуйте это для проверки - также, если вы пытались получить доступ к строковому номеру, который был объявлен в Page_Load - это невозможно в статическом методе, единственные данные, к которым у вас будет доступ, - это то, что было передано в веб-метод

Я разместил комментарий, в котором говорится, что его нужно изменить с void - на самом деле он может быть void - но это если вы хотите выполнить какое-то действие, обычно с базой данных - даже тогда хорошей практикой является возврат строки, чтобы сообщить клиенту, было ли это успех или нет

person Scott Selby    schedule 08.11.2012
comment
Я не знаю, что не так, кажется, что страница aspx вызывается правильно, у меня есть вопрос: если я устанавливаю точку останова в веб-методе, ее нужно настроить во время отладки? Большое спасибо. - person jisazat; 08.11.2012
comment
У меня такая же проблема, как у @jisazat. В моем случае он не будет вмешиваться в метод, а вместо этого будет возвращать полную разметку страницы. Нужен ли мне специальный параметр конфигурации, чтобы позволить ASP.NET использовать эти атрибуты, или...? - person Tom Lint; 20.12.2014