我无法使用查询更新MVC ASP

时间:2018-10-31 02:27:38

标签: javascript asp.net-mvc

我正在尝试在脚本上保存更改,我只需要从表中进行更新。到目前为止,如果我单击该按钮,警报成功将不会弹出,也不会看到任何错误。我还试图验证我的表是否进行了更改,但结果什么也没发生

这是我保存按钮中的呼叫功能:

<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

1 个答案:

答案 0 :(得分:0)

由于您使用的是AJAX回调,因此应将返回类型更改为ActionResult,并使用[HttpPost]属性标记操作方法,还应使用return Content()return Json()取决于UpdateOpsDiff()返回的类型(分别为stringobject)。这是正确设置的示例:

[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);