我正在尝试在脚本上保存更改,我只需要从表中进行更新。到目前为止,如果我单击该按钮,警报成功将不会弹出,也不会看到任何错误。我还试图验证我的表是否进行了更改,但结果什么也没发生
这是我保存按钮中的呼叫功能:
<script>
var op = '';
var op_dif = '';
$('#btnSave').click(function () {
op = $('#op').val();
op_dif = $('#op_difficulty').val();
alert(op + " " + op_dif); // I can see the value here
$.post("/Home/UpdateOP", {
'data': JSON.stringify([{
'op': op,
'opDiff': Op_dif
}])
}, function (data) {
var resp = JSON.parse(data);
if (resp["status"] == "SUCCESS") {
alert('Data has been successfully updated');
location.reload();
}
else {
alert('Error!!');
}
});
});
</script>
我的更新查询所在的视图:
public string UpdateOpsDiff(operation[] ops)
{
string res = "";
foreach(var op in ops)
{
string updatetQuery = "update sys.OP_difficulty set op_difficulty = @diff where op = @op;";
MySqlCommand updateCommand = new MySqlCommand(updatetQuery);
updateCommand.Connection = myConnection;
updateCommand.Parameters.AddWithValue("@diff", op.op_dif);
updateCommand.Parameters.AddWithValue("@op", op.op);
myConnection.Open();
int updatedRowNum = 0;
try
{
updatedRowNum = updateCommand.ExecuteNonQuery();
}
catch(MySqlException)
{
updatedRowNum = updateCommand.ExecuteNonQuery();
}
finally
{
myConnection.Close();
}
res = "{status:SUCCESS, updatedRowNum:" + updatedRowNum + "}";
}
return res;
}
读取视图查询的控制器:
public string UpdateOp()
{
string data = Request.Form["data"];
IQA sys = new MysqlSys();
try
{
var rows = JsonConvert.DeserializeObject<operation[]>(data);
return sys.UpdateOpsDiff(rows);
}
catch (JsonSerializationException je)
{
Console.WriteLine(je.Message);
return "{status:'DATA_FORMAT_ERROR'}";
}
}
是否有我需要的任何遗失物品。使用控制器中的查询已经可以正常工作,但是这次我需要从视图中存储查询。
任何建议或评论。 TIA
答案 0 :(得分:0)
由于您使用的是AJAX回调,因此应将返回类型更改为ActionResult
,并使用[HttpPost]
属性标记操作方法,还应使用return Content()
或return Json()
取决于UpdateOpsDiff()
返回的类型(分别为string
或object
)。这是正确设置的示例:
[HttpPost]
public ActionResult UpdateOp(string data)
{
IQA sys = new MysqlSys();
try
{
var rows = JsonConvert.DeserializeObject<operation[]>(data);
string result = sys.UpdateOpsDiff(rows);
// return JSON-formatted string should use 'Content()', see https://stackoverflow.com/q/9777731
return Content(result, "application/json");
}
catch (JsonSerializationException je)
{
// do something
return Json(new { status = "DATA_FORMAT_ERROR"});
}
}
然后设置AJAX回调以将JSON字符串传递到上述操作方法中:
$('#btnSave').click(function () {
op = $('#op').val();
op_dif = $('#op_difficulty').val();
var values = { op: op, opDiff: op_dif };
$.post("/Home/UpdateOP", { data: JSON.stringify(values) }, function (data) {
var resp = JSON.parse(data);
if (resp["status"] == "SUCCESS") {
alert('Data has been successfully updated');
location.reload();
}
else {
alert('Error!!');
}
});
});
注意:
JSON格式的字符串应以键值对的形式显示,以作为内容返回,如下例所示:
res = string.Format(@"{""status"": ""SUCCESS"", ""updatedRowNum"": ""{0}""}", updatedRowNum);