I'm currently working on a project where I'm displaying a list of tourist information in the admin section. I need to update this data periodically so that the admin can see the latest information from the server. To display the list, I'm using a DataTable. Let's discuss step by step how we can refresh or reload a DataTable after making an AJAX call in MVC.
In this post we will cover the following points:
using System.ComponentModel.DataAnnotations;
public class Tourist
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string FullName { get; set; }
[Required]
public string Gender { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
public string About { get; set; }
}
First, let's start with the controller code:
using System.Linq;
using System.Web.Mvc;
using TestApp.Models; //
public class TouristController : Controller
{
private DbContext db = new DbContext(); // DbContext name
public ActionResult Index()
{
return View();
}
// Action to fetch tourists data
public ActionResult GetTouristsData()
{
var tourists = db.Tourists.ToList();
return Json(tourists, JsonRequestBehavior.AllowGet);
}
}
View code:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Tourist DataTable Example</title>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js"></script>
</head>
<body>
<table id="touristTable" class="display" style="width:100%">
<thead>
<tr>
<th>Id</th>
<th>Full Name</th>
<th>Gender</th>
<th>Email</th>
<th>About</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script>
$(document).ready(function () {
$('#touristTable').DataTable({
ajax: {
url: '@Url.Action("GetTouristsData", "Tourist")',
dataSrc: '' // We have set data source to empty because it's directly an array
},
columns: [
{ data: 'Id' },
{ data: 'FullName' },
{ data: 'Gender' },
{ data: 'Email' },
{ data: 'About' }
]
});
// Function to reload dataTables with latest data
function reloadDataTable() {
$('#touristTable').DataTable().ajax.reload();
}
// calling reloadDataTable function when button clicked
$('#reloadBtn').click(function () {
reloadDataTable();
});
});
</script>
<button id="reloadBtn">Reload DataTable</button>
</body>
</html>
In above example, in the controller we have an action method GetTouristsData which fetches the tourist data from the database and returns it as JSON. The view page having a DataTable initialized with data array using AJAX. The reloadDataTable function is used to reload the DataTable with latest data from server.
<script>
$(document).ready(function () {
var touristTable = $('#touristTable').DataTable({
ajax: {
url: '@Url.Action("GetTouristsData", "Tourist")',
dataSrc: ''
},
columns: [
{ data: 'Id' },
{ data: 'FullName' },
{ data: 'Gender' },
{ data: 'Email' },
{ data: 'About' },
{
data: null,
render: function (data, type, row) {
return '<button class="deleteBtn" data-id="' + data.Id + '">Delete</button>';
}
}
]
});
// Delete button click event handler
$('#touristTable').on('click', '.deleteBtn', function () {
var touristId = $(this).data('id');
var row = $(this).closest('tr');
// Make AJAX call to delete tourist by ID
$.ajax({
url: '@Url.Action("DeleteTourist", "Tourist")', // Action method to delete tourist
method: 'POST',
data: { id: touristId },
success: function () {
// Remove row from DataTable after successful deletion of tourist record
touristTable.row(row).remove().draw(false);
},
error: function (xhr, status, error) {
alert('Unable to delete record');
}
});
});
});
</script>