无法触发WebMethod(.Net 2.0 aspx)

时间:2014-11-14 17:45:16

标签: javascript c# jquery asp.net

我试图在aspx页面后面的代码中调用一个函数,并且无处可去。我一直使用通用处理程序(ashx文件),但想在页面本身中放入一些Web方法。我已经回到基础并创建了一个带有1页的新应用程序,只需添加一个按钮,一个脚本引用(jQuery)和一个脚本。有一个简单的返回字符串的web方法。这是代码......

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebMethod.aspx.cs" Inherits="temp_WebMethod" %>

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="../scripts/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <button id="hello" type="button">Say Hello</button>
    </div>
    </form>
    <script type="text/javascript">

        $("#hello").on("click", function () {

            $.ajax({
                contentType: "application/json; charset=utf-8",
                data: {},
                dataType: "JSON",
                type: "POST",
                url: "WebMethod.aspx/Hello"
            })
            .done(function (data) {
                alert(data);
            })
            .error(function (jqXHR, textStatus, error) {
                console.dir(error);
                alert(textStatus);
            });

        });

    </script>
</body>
</html>

代码

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class temp_WebMethod : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod()]
    [ScriptMethod(UseHttpGet=false)]
    public static string Hello()
    {
        return "{\"response\":\"Hello world\"}";
    }
}

正如您所看到的,它非常基本,我只是想在我开始尝试使用它之前让这个概念有效。

目前,我将页面返回到ajax调用,就好像url末尾没有方法名称一样。此外,如果我在Hello()方法中放置一个断点,那么它永远不会被触发。我看过很多网站(这里有很多问题),但没有一个网站有过帮助。

我不知道为什么我不能做这么简单的工作,并感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我会尝试将其作为GET,然后您可以在浏览器中点击它并查看确切的文本。一旦你有一个使用GET的ajax请求,将其更改为帖子并更改你的javascript。

答案 1 :(得分:0)

您需要将以下代码添加到web.config文件中.....

 <system.webServer>
   <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
  </customHeaders>
</httpProtocol>