Ajax POST没有调用Codebehind函数

时间:2015-05-29 12:02:34

标签: c# jquery asp.net ajax

我的Ajax帖子没有运行我的代码隐藏方法,因此没有返回任何数据。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="AspTest.Test" %>

Test.aspx(Ajax脚本)

    <script>
                $(".avatarThumb").click(function () {
                    $.ajax({
                        type: "POST",
                        url: "Test.aspx/MyMethod",
                        //data: {"s": "Some data passed through" },
                        //contentType: 'application/json; charset=utf-8',
                        //dataType: 'json',
                        success: function (response) {
                            alert(response.d); //Returns "undefined"
                        },
                        failure: function(response) {
                            alert(response);
                        }
                    });
                });
            </script>

删除contentType和dataType确实取得了成功,但没有运行codeBehind方法。在contentType和/或dataType处于活动状态时,它不会成功也不会失败。 FF firebug不会显示任何错误。

* Test.aspx.cs CodeBehind方法

        [System.Web.Services.WebMethod]
        public static string MyMethod()
        {
(*)         Debug.WriteLine("MyMethod called!"); // (*) Breakpoint never reached

            return "Method called!";
        }

3 个答案:

答案 0 :(得分:1)

像这样更改您的代码。它应该工作正常

var SendData = {};
$.ajax({
        type: "POST",
        url: "Test.aspx/MyMethod",
        data: JSON.stringify(SendData),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.d);
        },
        error: function (result) {
            console.warn(result.statusText);
        }
    });

你的C#方法:

[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string MyMethod()
{

    return "Method called!";
}

如果您的页面Test.aspx位于项目的根级别,则上述代码有效。如果不改变url参数值,如&#34; ../ Test.aspx / MyMethod&#34;根据您文件的位置深度。

答案 1 :(得分:0)

按如下方式更改数据并发送ajax。

   $.ajax({
                    type: "POST",
                    url: "Test.aspx/MyMethod",
                    data: JSON.stringify({"s": "Some data passed through" }),
                    contentType: 'application/json; charset=utf-8',
                    //dataType: 'json',
                    success: function (response) {
                        alert(response.d); //Returns "undefined"
                    },
                    failure: function(response) {
                        alert(response);
                    }
                });

现在webmethod应匹配通过ajax发送的参数。

    [System.Web.Services.WebMethod]
    public static string MyMethod(string s)
    {

        return "Method called!";
    }

答案 2 :(得分:0)

试试这个:

$(".avatarThumb").click(function () {
    $.ajax({
        type: "POST",
        url: '<%=ResolveUrl("~/Test.aspx/MyMethod")%>',
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            alert(response.d); 
        },
        failure: function(response) {
            alert(response);
        }
    });
});

确认GET或POST类型。