Ajax 调用 ASP.NET WebMethod 未访问服务器端方法

Ajax call to ASP.NET WebMethod not hitting server side method

我正在尝试将单个参数传递给我的代码。我已到达 ajax 的成功终点,但我的 aspx.cs 代码中的方法未被调用。如果它有所作为,我正在使用主文件。

Javascript:

$(document).ready(function () {
    var someID = "";
    $('.glyphicon-trash').click(function () {
        $.ajax({
            type: "POST",
            url: "fileName.aspx/deleteSomething",
            data: "{'deleteSomeID':'" + someID + "'}", // someID is assigned to a value by another button
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                alert("success"); // this alert works.
            }
        });
    });
});

文件名.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{ 
    //... stuff here
}

[WebMethod]
public static void deleteSomething(string deleteSomeID)
{
    MySqlDbUtilities db = new MySqlDbUtilities();
    MySqlCommand cmd;
    string sql = "DELETE FROM Targets WHERE targetID = @someID";
    cmd = db.GetCommand(sql);

    cmd.Parameters.AddWithValue("@someID", deleteSomeID);

    cmd.ExecuteNonQuery();
    db.Dispose();
}

当您点击页面上的按钮时,"someID" 被填充。这是正常工作,我三重检查。然而,该方法不执行任何操作。也不知道是不是达到了。有什么想法吗?

我觉得你的数据:参数不对。你不需要它是一个字符串。

更新:你说你击中了成功处理程序——为了完整起见,你能添加这个错误处理程序并仔细检查它没有被击中吗?

$(document).ready(function () {
 var someID = "";
        $('.glyphicon-trash').click(function () {
            $.ajax({
                type: "POST",
                url: "fileName.aspx/deleteSomething",
                data: { deleteSomeID: someID },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    alert("success"); // this alert works.
                },
                error: function (xhr, status, text) {
                  console.log(xhr.status);
                  console.log(xhr.text);
                  console.log(xhr.responseText);
                 }
            });
        });

我更习惯 MVC,所以我不能保证 JsonResult 在 webforms 中工作(如果不是我会感到惊讶)。

将您的网络方法更改为 return JsonResult。

在您的代码中,将布尔值声明为 false,并在 SQL 执行后将其设置为 true。 Return 以下:

JsonResult returnObj = new JsonResult
        {
            Data = new
            {
                wasSuccessful = myBool,
            },
            ContentEncoding = System.Text.Encoding.UTF8,
            JsonRequestBehavior = JsonRequestBehavior.DenyGet
        };

        return Json(returnObj);

更改您的成功处理程序:

success: function (data) {
            console.log(data);
            alert(data.wasSuccessful);
        }

不要手动构建 data 参数,而是使用 JSON.stringify:

进行适当的编码
$.ajax({
    type: "POST",
    url: "fileName.aspx/deleteSomething",
    data: JSON.stringify({ deleteSomeID: someID }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        alert("success");
    }
});

此外,您可以处理查询可能引发异常的情况,并在您的 UI 中采取相应的行动,这是一种非常简单的方法:

[WebMethod]
public static string deleteSomething(string deleteSomeID)
{
    try {
        MySqlDbUtilities db = new MySqlDbUtilities();
        MySqlCommand cmd;
        string sql = "DELETE FROM Targets WHERE targetID = @someID";
        cmd = db.GetCommand(sql);

        cmd.Parameters.AddWithValue("@someID", deleteSomeID);

        cmd.ExecuteNonQuery();
        db.Dispose();
    } 
    catch (Exception e) {
        return e.Message;
    }

    return "1";
}

然后,管理成功回调的响应:

$.ajax({
    type: "POST",
    url: "fileName.aspx/deleteSomething",
    data: JSON.stringify({ deleteSomeID: someID }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        if (response == "1") {
            alert("Successful deletion");
        } else {
            alert("Operation failed! Details: " + response);
        }
    }
});