Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
126
rated 0 times [  128] [ 2]  / answers: 1 / hits: 122399  / 9 Years ago, thu, march 19, 2015, 12:00:00

So here I have list of menus for admin and under them I have Upload news. When this particular menu is clicked, I call a partial view as below.



$(#body_data).load(/Admin/GetDailyNews, function () {
$(#dailyNews).dataTable({
lengthMenu: [[5, 10, 25, 50, -1], [5, 10, 25, 50, All]],
columnDefs: [{ targets: 3, orderable: false }],
pagingType: full_numbers,
oLanguage: { sSearch: },
deferRender: true
});
}


My PartialViewResult in AdminController is as below:



[HttpGet]
public PartialViewResult GetDailyNews()
{
var context=new MyContext();
List<AVmodel.NewsEventsViewModel> model = new List<AVmodel.NewsEventsViewModel>();
List<news> news = (from n in context.news where n.stdate >= System.DateTime.Now orderby n.stdate descending select n).ToList();
foreach (var NEWS in news)
{
model.Add(new AVmodel.NewsEventsViewModel()
{
EDate = NEWS.stdate,
EDesc = NEWS.brief,
EName = Convert.ToString(NEWS.name),
NID = NEWS.nid
});
}
return PartialView(_UploadNews, model);
}


My _UploadNews.cshtml is as below



@model IEnumerable<MCB.Models.BusinessObjects.AVmodel.NewsEventsViewModel>
<table id=dailyNews cellspacing=0 width=100% class=table table-condensed table-hover table-responsive table-bordered order-column>
<thead>
<tr>
<th>Event Date</th>
<th>Event Name</th>
<th>Detailed News</th>
<th class=disabled>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var news in Model)
{
<tr [email protected]>
<td>@news.EDate.Date.ToShortDateString()</td>
<td>@Convert.ToString(news.EName)</td>
<td>@Convert.ToString(news.EDesc)</td>
<td><button class=btn btn-primary data-target=#editAddNews data-toggle=modal onclick=javascript: EditNews(this); [email protected]><span class=fa fa-edit></span> </button>&nbsp; <button class=btn btn-danger onclick=javascript: DeleteNews(this); [email protected]><span class=fa fa-trash-o></span></button></td>
</tr>
}
</tbody>
</table>


So till now it's good. Everything is going well and the table displays only those news which are of future days. Now I have a option for admin to fetch the whole set of news from table, including past days. So I have kept a checkbox in my partialview as below which is a bootstrap switch type:



<input type=checkbox name=fetchNews-checkbox data-on-text=All News data-off-text=Upcoming News data-on-color=primary data-off-color=default data-label-width=100px data-label-text=News details>


and I have written a onswitchchange for that particular checkbox as below:



$([name='fetchNews-checkbox']).on('switchChange.bootstrapSwitch', function (event, state) {
if (state)
{
fetchNews('all');
}
else
{
fetchNews('upcoming');
}
});


and my fetchNews function is as below:



function fetchNews(context)
{
if(context!=)
{
$(#dailyNews).dataTable({
sPaginationType: full_numbers,
bProcessing: true,
bServerSide: true,
sAjaxSource: /Admin/FetchNews
});
}
}


when this function is called I am getting an alert which says




DataTables warning: table id=dailyNews - Cannot reinitialise
DataTable. For more information about this error, please see
http://datatables.net/tn/3




I visited the above said link but was not able to understand anything. Can anyone please let me know, how to call a controller json method and render list of news into this Table?


More From » jquery

 Answers
74

The error message http://datatables.net/tn/3 states the problem precisely. You're re-initializing the table with different options in fetchNews().



You need to destroy the table first, see http://datatables.net/manual/tech-notes/3#destroy.
You can do that with $(#dailyNews).dataTable().fnDestroy() (DataTables 1.9.x) or $(#dailyNews).DataTable().destroy() (DataTables 1.10.x).



function fetchNews(context)
{
if(context!=)
{
// Destroy the table
// Use $(#dailyNews).DataTable().destroy() for DataTables 1.10.x
$(#dailyNews).dataTable().fnDestroy()

$(#dailyNews).dataTable({
// ... skipped ...
});
}
}


Alternatively, if you're using DataTables 1.10.x, you can initialize the new table with additional option destroy: true, see below.



function fetchNews(context)
{
if(context!=)
{
$(#dailyNews).dataTable({
destroy: true,
// ... skipped ...
});
}
}

[#67378] Tuesday, March 17, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
moriah

Total Points: 201
Total Questions: 100
Total Answers: 82

Location: Tuvalu
Member since Sun, Sep 4, 2022
2 Years ago
;