我从编辑器测试了更新查询,它运行良好,但是如果我要将其实施到我的ajax并从控制器中调用更新,则结果将失败,并且始终提醒我说“未找到”
从我的角度来看,这是我的Ajax呼叫:
function SaveChanges() {
var Op_dif = document.getElementById("Op_dif").value
var op = document.getElementById("OP").value
//alert(OP + " , " + Op_desc)
$.ajax({
url: '/HomeController/UpdateOP',
type: 'POST',
contentType: 'application/json',
data: {
'Op_dif': Op_dif,
'op': op
},
success: function (data) {
alert('success');
},
error: function (jqXhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
我的控制器如下:
public ActionResult UpdateOP(int Op_dif, string op)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET Op_dif = @Op_dif WHERE op = @op ", con);
//cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Op_dif", Op_dif);
cmd.Parameters.AddWithValue("@op", op);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
return RedirectToAction("Index");
}
答案 0 :(得分:2)
您应该说Home/UpdateOP
而不是HomeController/UpdateOP
,因为这是路由语义。始终在最后省略零件控制器。
Ajax调用应如下所示:
function SaveChanges() {
var Op_dif = document.getElementById("Op_dif").value
var op = document.getElementById("OP").value
//alert(OP + " , " + Op_desc)
$.ajax({
url: '/Home/UpdateOP',
type: 'POST',
data: {
'Op_dif': Op_dif,
'op': op
},
success: function (data) {
alert('success');
},
error: function (jqXhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
您遇到的问题是,您要在方法末尾返回一个RedirectToAction
,而这在ajax调用中不会产生任何意义。尝试返回JsonResult
并正确处理。您可以返回如下内容:
return Json({Status = "Ok", Message = "Data updated successfully"}, JsonRequestBehavior.AllowGet);
然后在js代码成功方法中执行类似的操作。
if(data.Status == "Ok") {
alert(data.Message);
} else {
alert("Something bad happened");
}