Удалить только с помощью метода действия [HttpPost] - PullRequest
1 голос
/ 23 марта 2011

Я хочу предоставить возможность удаления записи, но только с помощью метода действия [HttpPost], я имею в виду, я не хочу, чтобы другой просмотр подтвердил удаление, только javascript Confirm был бы хорош.

Проблема в том, что, поскольку я не предоставил метод действия [HttpGet], контроллер не может направить URL-адрес на метод действия [HttpPost], скорее он выдает 404 Not Found ответ, когда я нажимаю на ссылку удаления.

Вот мой метод действия:

// Note that there is no [HttpGet] delete action method

[HttpPost]
public ActionResult Delete(string name)
{
    var village = Villages.FirstOrDefault(v => v.Name == name && v.Deleted == false);

    if (village == null)
        return View("Error");

    village.Deleted = true;
    dc.SubmitChanges();

    return RedirectToRoute(new { action = "Index" });
}

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Создайте скрытую форму со ссылкой удаления в качестве действия.Отправьте его, когда пользователь подтвердит:

<form method="post" id="deleteForm" action="">
</form>

<script type="text/javascript">
$('document').ready(function() {
    $('a.delete').click(function(){
        if (confirm('You sure?')) {
            $('#deleteForm').attr('action', uri);
            $('#deleteForm').submit(); //jquery
        }
        return false;
    });
});
</script>

<a href="/user/remove/5" class="delete">Delete</a>

Обновление

Преобразованный скрипт в jquery.Все, что вам нужно сделать, это добавить форму, скрипт и класс «удалить» в ваши ссылки для удаления.Обработка формы выполняется автоматически для всех ссылок.

1 голос
/ 23 марта 2011

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

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