Alexander Díaz
Alexander Díaz

Reputation: 531

How I can POST an id to ASP.Net controller from view using AJAX?

I'm trying to POST an ID to the controller, but nothing is being sent. This I am doing from an Alert using Sweet Alert.

This is the code for the view:

@foreach (var item in Model)
{
   <div>
       <a class="btn btn-danger py-2 my-1" onclick="Clickfn(@item.CertificadosID)" data-id="@item.CertificadosID">Eliminar</a>
   </div>
}

<script>
function Clickfn(id) {
    swal({
        title: "¿Estas seguro de que quieres eliminar esto?",
        text: "La información se perdera hasta que vuelva a editarla",
        icon: 'warning',
        dangerMode: true,
        buttons: [
            { text: "Cancelar", visible: true, value: null, closeModal: true },
            { text: "Eliminar", visible: true, value: true, closeModal: true }
        ]
    }).then((value) => {
        if (value == true) {
            $.ajax({
                url: '/Certificados/Delete',
                type: 'POST',
                data: { "id": id }
            });
        }
    });
}
</script>

And this is the code of the controller action:

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> DeleteConfirmed(int id)
    {
        var certificados = await _context.Certificados.FindAsync(id);
        _context.Certificados.Remove(certificados);
        await _context.SaveChangesAsync();
        TempData["Mensaje"] = "Su certificado ha sido eliminado";
        return RedirectToAction(nameof(Index));
    }

Upvotes: 0

Views: 700

Answers (1)

Yiyi You
Yiyi You

Reputation: 18159

Here is a demo to use ajax to post data to action with [ValidateAntiForgeryToken]:

View(You need to use <form method="post"></form> in view,so that you can have $('input[name="__RequestVerificationToken"]')):

<form method="post"></form>
    <a class="btn btn-danger py-2 my-1" onclick="Clickfn(1)" data-id="1">Eliminar</a>
@section scripts{ 

<script>
    function Clickfn(id) {
        var token = $('input[name="__RequestVerificationToken"]').val();
        $.ajax({
            url: '/Certificados/Delete',
            type: 'POST',
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
            data: { "id": id }
        });
    }
</script>
}

Controller:

[HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteConfirmed(int id)
        {
            return Ok();
        }

result: enter image description here

Upvotes: 2

Related Questions