c# - 对 ASP.NET WebMethod 的 Ajax 调用未命中服务器端方法

标签 c# jquery asp.net ajax webforms

我正在尝试将单个参数传递给我的代码。我已经到达 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”就会被填充。工作正常,我检查了三次。然而该方法不执行任何操作。我也不知道是否达到了。有什么想法吗?

最佳答案

不要手动构建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);
        }
    }
});

关于c# - 对 ASP.NET WebMethod 的 Ajax 调用未命中服务器端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000884/

相关文章:

c# - 接受字符串输入并删除出现一定次数的所有字符的函数

javascript - 函数超时 (jQuery)

jquery - 一次滑下多个元素

c# - 如何在MySql中使用 Entity Framework

c# - Visual Studio 实际上是如何进行 Excel 加载项调试的

javascript - 下划线绑定(bind) vs jQuery.proxy vs native 绑定(bind)

asp.net - 是否需要有专用 IP 地址才能安装 SSL 证书?

asp.net - 如何赋予 Owin 用户身份?

asp.net - 同一解决方案中的项目之间如何共享类?

c# - 在为图像处理项目选择 C# 和 C++ 时,我应该考虑哪些因素?