我正在尝试将单个参数传递给我的代码。我已经到达 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/