mvc asp не может обновить используя запрос с моей точки зрения - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь сохранить изменения в моем скрипте, и мне просто нужно обновление из моей таблицы. До сих пор, если я нажму на кнопку, предупреждение не будет отображаться и не будет отображаться ни одной ошибки. Я также попытался проверить в своей таблице, внесены ли изменения, но в результате ничего не произошло

Вот функция вызова с моей кнопки сохранения:

<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'}";
            }
        } 

Есть ли недостающие предметы, которые мне нужны. Он уже работает с использованием запроса от моего контроллера, но на этот раз мне нужно сохранить мой запрос из моего представления.

Любые предложения или комментарии. ТИА

1 Ответ

0 голосов
/ 31 октября 2018

Поскольку вы используете обратный вызов 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...