Выполнить действие веб-контроллера без представления [c #] - PullRequest
0 голосов
/ 04 марта 2019

У меня есть таблица данных, которая получает значения из базы данных с каждой строкой в ​​последнем столбце кнопкой удаления.

$"<button type='submit'  class='btn btn-danger test' id='{i.id}' onclick='return Delete();'>Delete</button>"

Моя кнопка получает идентификатор, который является идентификатором модели из этой строки.

Я хочу удалить строку, если нажму на кнопку.Но не могу понять, как вызвать метод без моего приложения, пытающегося найти представление.(У меня нет вида на удаление и я не хочу его создавать).Я посмотрел, но ничего не работает.

Мое действие контроллера:

    [Authorize(Roles = "user")]
    [HttpDelete]
    public ActionResult Delete(Guid id)
    {
        if (BLayer.getAllGames().ToList().Exists(x => x.id == id))
        {
            BLayer.DeleteGame(id);
        }

        return new EmptyResult();
    }

Моя функция Jquery:

function Delete() {
    var table = $("#tableOverviewGames").DataTable();
    $('#tableOverviewGames tbody').on('click', 'button', function () {
        var idGame = $(this).attr('id');
        $.ajax({
            url: "Delete",
            type: 'DELETE',
            data: { id: idGame },
            async: false,
            contentType: false,
            success: function (data) {
                alert("Vous avez supprimé le jeu");
            },
            error: function (data) {
                console.log(data);
            }
        });
    });

}

Может кто-нибудь помочь мне, пожалуйста?

Спасибо!

РЕДАКТИРОВАТЬ:

Это ошибка, которую я получаю в консоли:

DELETE http://localhost:3673/Game/Delete 404 (Not Found)

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Я вижу, что когда вы звоните, вы ошибаетесь, Ури, поэтому вы получили 404 НЕ НАЙДЕНЫ.

Измените свой атрибут HttpDelete на

[HttpDelete("{id}")]

, передавая guid как часть Uri, например http://localhost:3673/Game/eef63296-6bb3-40a5-aa89-be69e75a66eb,, также любое тело, переданное для вызовов удаления, будет игнорироваться, если только Content-Добавлен заголовок длины, проверьте эту ссылку .

Если вы все еще настаиваете на теле, попробуйте изменить подпись, как показано ниже

[Authorize(Roles = "user")]
[HttpPost("delete")] //Added route to differentiate Create/Insert REST end point
public ActionResult Delete([FromBody]Guid id)

Ваш вызов AJAX должен выглядеть следующим образом

$.ajax({
 url: "Delete",
 type: 'DELETE',
 data: idGame, // Pass value directly.
 sync: false,
 contentType: false,
 success: function (data) {
 alert("Vous avez supprimé le jeu");
},

На вашем месте я бы начал тестирование с базовым типом, таким как строка, для полей, вызывающих проблемы.

0 голосов
/ 04 марта 2019

Почему бы вам просто не вернуть JSON из контроллера, такого как

return Json(new {success = true})

, а затем вы можете (если вам нужно) выполнить проверку успеха ajax на предмет того, сработал ли он или нет

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