在ASPX页面中使用webmethod服务AJAX请求

时间:2012-01-23 02:22:02

标签: vb.net jquery asp.net-ajax asp.net-3.5 webmethod

我正在尝试使用.aspx页面中的方法为AJAX请求提供服务。出于某种原因,我没有得到我想要的数据。谁能告诉我我做错了什么?

mypage.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 

2 个答案:

答案 0 :(得分:12)

该方法必须为Shared

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

另外,当您不使用代码隐藏文件时,我不确定是否支持页面方法。

答案 1 :(得分:0)

传回的错误是什么?您看到整个html页面的原因是因为您在代码中有错误并且正在传回的消息是完整的html,它告诉您错误的位置。我确定如果你修复错误,那么你会没事的。

我不确定您是否期望从代码隐藏中看到错误消息。请记住 - 根据Web服务方法是否成功调用,调用Ajax部分中调用的成功或错误函数。我认为你认为你会在这里看到来自webmethod的错误消息,但实际上,如果webmethod抛出了错误,那么你仍然会有一个成功的ajax调用,因此“成功”函数就是运行的那个。 “错误”功能仅在整个webmethod调用失败时运行,因此服务器没有响应。

希望这是有道理的。