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?'');
})