This code is executing correctly, but the problem is that I cannot get through to the controller so that it performs the deletion JS- Runs without errors and no errors are observed in the Developer Tool. But the controller itself is not executed.
JS
jQueryAjaxDelete = form => {
if (confirm('Are you sure to delete this record ?')) {
try {
$.ajax({
type: 'POST',
url: form.action,
data: new FormData(form),
contentType: false,
processData: false,
success: function (res) {
/*$('#view-all').html(res);*/
setTimeout(function () { location.reload(); }, 1000);
},
error: function (err) {
console.log(err)
}
})
} catch (ex) {
console.log(ex)
}
}
//prevent default form submit event
return false;
}
Controller
[HttpPost]
public async Task<ActionResult> CategoryDelete(int? id)
{
if (id == null)
{
return NotFound();
}
var category = await _context.Categories.FindAsync(id);
_context.Categories.Remove(category);
await _context.SaveChangesAsync();
return Json(_context.Categories.ToList());
}
View
<td><form asp-action="CategoryDelete" asp-route-id="@c.Id" onsubmit="return jQueryAjaxDelete(this)" class="d-inline">
<input type="submit" value="Delete" class="btn btn-danger" />
</form></td>
[SOLVED] You need to add routing through attributes [HttpPost], [HttpGet]
[HttpGet("Admin/CategryDelete/{id}")]//here
public ActionResult CategoryDelete()
{
return View();
}
[HttpPost("Admin/CategryDelete/{id}")]//here
public async Task<ActionResult> CategoryDelete(int? id)
{
if (id == null)
{
return NotFound();
}
var category = await _context.Categories.FindAsync(id);
_context.Categories.Remove(category);
_context.SaveChanges();
return Json(_context.Categories.ToList());
}