MVC - многопараметрический вызов Ajax - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь отправить 2 параметра на контроллер из View с помощью вызова ajax.Эта функция работала раньше, когда я использовал только 1 параметр, но больше не работает, так как я добавил второй.

Javascript с ajax:

function DeleteRole(roleId) {
    var confirmation = confirm("Are you sure you want Delete this Role");
    if (confirmation) {
        $.ajax({
            type: "POST",
            url: '@Url.Action("Delete_Role", "Admin")',
            dataType: 'json',
            data: JSON.stringify({
                roleId: roleId,
                applicationId: $('#AppList').val()
            })
        }).success(function (response) {
            if (response.success) {
                alert(response.responseText);
                $(".k-grid").data("kendoGrid").dataSource.read();
            }else {
                alert(response.responseText);
            }
        }).error(function() {
            alert("Error on Deletion");
        });
    }
}

MVC - метод контроллера (информация здесь вообще отсутствует)

   [HttpPost]
    public JsonResult Delete_Role(Guid rowId, Guid applicationId)
    {
        var users = new UserStore().ReadForAppRole(applicationId, rowId);

        if (users.Any())
        {
            return Json(new { success = false, responseText = "Users's Currently Exist Within this Role" },
                JsonRequestBehavior.AllowGet);
        }

        new RoleStore().RemoveRole(applicationId, rowId);

        return Json(new { success = true, responseText = "Role Successfully Deleted" },
            JsonRequestBehavior.AllowGet);
    } 

1 Ответ

0 голосов
/ 19 ноября 2018

Две проблемы

1) Ваше имя параметра метода действия - rowId, но вы отправляете roleId

2) Метод JSON.stringify создает строковое представление JavaScriptобъект, который вы передаете ему.С помощью этого метода вы отправляете строку JSON объекта в качестве свойства data параметра метода $.ajax.При отправке строки JSON вашего объекта JS вы должны указать свойство contentType опции для application/json.

$.ajax({
    type: "POST",
    url: '@Url.Action("Delete_Role", "Admin")',
    dataType: 'json',
    data: JSON.stringify({
        rowId: '@Guid.NewGuid()', // dummy GUID for testing
        applicationId: '@Guid.NewGuid()'
    }),
    contentType:"application/json"
}).done(function (response) {
    console.log(response);
}).fail(function() {
    console.log("Error on Deletion");
});

Теперь $.ajax добавит заголовок запроса Content-Type к вызовусо значением application/json.Как часть привязки модели, связыватель модели по умолчанию будет считывать это значение заголовка запроса, а затем решит прочитать данные из тела запроса (полезная нагрузка запроса).

Кроме того, поскольку вы не отправляете сложный объект, вы делаетене нужно отправлять строковую версию JSON.Просто передайте объект JavaScript как свойство data, и $.ajax отправит его как данные формы.

$.ajax({
    type: "POST",
    url: '@Url.Action("Delete_Role", "Admin")',
    data: {
        rowId: '@Guid.NewGuid()',  // dummy GUID for testing
        applicationId: '@Guid.NewGuid()'
    }
}).done(function (response) {
    console.log(response);
}).fail(function() {
    console.log("Error on Deletion");
});

В этом случае $.ajax отправит application/x-www-form-urlencoded в качестве значения заголовка запроса Content-Type, и механизм связывания сможет правильно его прочитать и отобразить ваши параметры.

Вы также можете удалить dataType в вызове ajax (, который я сделал во втором фрагменте кода ).JQuery Ajax будет угадывать правильный тип из заголовка ответа и использовать его для дальнейшего анализа данных, полученных от вызова сервера.В вашем случае вы вызываете метод Json для возврата ответа JSON от вашего метода действия, который отправит application/json в качестве значения заголовка Content-Type.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...