Обслуживайте запросы AJAX с помощью веб-метода на странице ASPX

Я пытаюсь обслуживать запросы AJAX с помощью метода на моей странице .aspx. По какой-то причине я не получаю данные, которые мне нужны. Может ли кто-нибудь сказать мне, что я делаю неправильно?

моя страница.aspx:

<%@ Page Language="VB" Title="My Page" %>
<%@ Import Namespace="System.Web.Services" %>
<%@ Import Namespace="System.Collections.Generic" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    Protected Sub Page_Load(sender As Object, e As System.EventArgs)

    End Sub

    <WebMethod()> Public Function testmethod() As Integer
        Return 5
    End Function

</script>

<html>
<!--...rest of page including mybutton and myresults-->

JQuery:

$("#mybutton").click(function() {
    $.ajax({
      type: "POST",
      url: "mypage.aspx/testmethod",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
        alert("success");
        $("#myresults").html(msg.d);
      },
      error: function(msg) {
        alert("error:" + JSON.stringify(msg));
      }
    });
});

Когда я нажимаю mybutton, я получаю предупреждение «ошибка:», а затем целую кучу HTML-кода, который говорит:

Unknown web method testmethod.
Parameter name: methodName 

person Flash    schedule 23.01.2012    source источник


Ответы (2)


Метод должен быть Shared:

<WebMethod()> Public Shared Function testmethod() As Integer
    Return 5
End Function

Кроме того, я не уверен, что методы страницы поддерживаются, если вы не используете файл кода программной части.

person Dave Ward    schedule 23.01.2012
comment
Чтобы добавить - В C# - это должно быть static - person LCJ; 12.06.2014

Какая ошибка передается обратно?? Причина, по которой вы видите всю html-страницу, заключается в том, что у вас есть ошибка в коде, а возвращаемое сообщение — это полный html, который сообщает вам, где ошибка. Я уверен, что если вы исправите ошибку, то все будет хорошо.

Я не уверен, что вы ожидаете увидеть сообщение об ошибке из кода программной части. Помните - функции успеха или ошибки, вызываемые в разделе Ajax, вызываются в зависимости от того, был ли метод веб-сервиса вызван успешно или нет. Я думаю, вы думаете, что увидите здесь сообщение об ошибке от веб-метода, но на самом деле, если веб-метод выдает ошибку, у вас все равно будет успешный вызов ajax, и, таким образом, функция «успех» будет работать. Функция «ошибка» будет работать только в случае сбоя всего вызова веб-метода, поэтому сервер не отвечает.

Надеюсь, это имеет смысл.

person Adam    schedule 23.01.2012
comment
Спасибо, я понял это после того, как опубликовал сообщение, я включил сообщение об ошибке внизу вопроса. - person Flash; 23.01.2012