net mvc llamar desde controlador botones asp asp.net asp.net-mvc model compiler-errors asp.net-mvc-5

llamar - El método de acción no funcionó con el atributo[HttpPost] en asp.net mvc



llamar a un controlador desde jquery (1)

Para eliminar datos en asp.net mvc 5 con Razor Engine , escribí este código que funciona bien. Quiero darle el atributo [HttpPost] , pero si lo agrego, la acción no funcionó. ¿Alguien podría ayudarme? ¿Cuál es el problema? Solo tengo una acción llamada delete , no necesito otra acción Delete con el atributo [HttpGet] . Cómo puedo arreglarlo ?

Repositories.cs

public bool Delete(int id, bool autoSave = true) { try { var entity = db.Carousels.Find(id); db.Entry(entity).State = System.Data.Entity.EntityState.Deleted; if (autoSave) return Convert.ToBoolean(db.SaveChanges()); else return false; } catch { return false; } }

Controlador de administrador

public ActionResult DeleteCarousel(int id) { CarouselRepositories blCarousel = new CarouselRepositories(); blCarousel.Delete(id); return View("ShowCarousel", blCarousel.Select()); }

ShowCarousel.cshtml

@model IEnumerable<NP1.Models.Carousel> @{ ViewBag.Title = "ShowCarousel"; Layout = "~/Views/Admin/AdminLayout.cshtml"; } <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.CarouselSubject) </th> <th> @Html.DisplayNameFor(model => model.CarouselInfo) </th> <th> @Html.DisplayNameFor(model => model.CarouselImage) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.CarouselSubject) </td> <td> @Html.DisplayFor(modelItem => item.CarouselInfo) </td> <td> @*@Html.DisplayFor(modelItem => item.CarouselImage)*@ <img style="width:300px; height:200px;" src="~/Images/Carousel/@item.CarouselImage" /> </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.CarouselID }) | @Html.ActionLink("Delete", "DeleteCarousel", new { id = item.CarouselID }) </td> </tr> } </table>


Marque su método con el atributo [HttpPost]

[HttpPost] public ActionResult DeleteCarousel(int id) { .... }

y cambie la vista para usar un formulario en lugar de un ActionLink()

@foreach (var item in Model) { <tr> <td>@Html.DisplayFor(m => item.CarouselSubject)</td> .... <td> @using (Html.BeginForm("DeleteCarousel", "yourControllerName", new { id = item.CarouselID }, FormMethod.Post)) { <input type="submit" value="Delete" /> // style it look like a link if you want } </td> </tr> }

Si también desea un mensaje de confirmación antes de eliminar, agregue el siguiente script jquery (el envío del formulario se cancelará si el usuario hace clic en Cancel o cierra el cuadro de diálogo sin hacer clic en OK )

$(''form'').submit(function() { return confirm(''Are you sure to delete it?''); })