J'utilise Jquery Datatable, qui inclut un rendu personnalisé pour les colonnes. Sur la base des valeurs, je dois désactiver certains contrôles dans celui-ci. Je veux recharger/actualiser/relier mon jquery datatable après le post. Comment puis je faire ça?
**Controller:**
[HttpPost]
public JsonResult PostAction(MyMOdel model)
{
//save changes to DB
return Json(new
{
Success = result,
});
}
public ActionResult MyAction()
//grab records from DB and return JSON
}
**View:**
@using (Ajax.BeginForm("PostAction", "ControllerName", null,
new AjaxOptions
{
UpdateTargetId = "update-message",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
OnSuccess = "updateSuccess"
}, new { @id = "myForm"
}
))
{
<table id="myTbl" class="display"><tr><td>col1</td></tr></table>
}
<script type="text/javascript">
var oTable = $('#myTbl').dataTable({
"sAjaxSource": "/ControllerName/MyAction",
<!-- more config -->
function updateSuccess(data, status, xhr) {
//refresh datatable;
}
</script>
Mise à jour: * *
J'ai trouvé la réponse:
effacer la table (fnClearTable)
ajouter de nouvelles données à la table (fnAddData)
redessiner la table (fnDraw)
Si la réponse est:
clear the table ( fnClearTable )
add new data to the table ( fnAddData)
redraw the table ( fnDraw )
D'abord, obtenez simplement une référence datatable, en utilisant
var oTable = $("#someTable").dataTable();
Après cela, faites ce que vous voulez:
Clear the table : oTable.fnClearTable();
Redraw the table : oTable.fnDraw();
Add new data to the table : oTable.fnAddData();
Cela a fonctionné pour moi:
// Initially
window.table = $('#TableID').dataTable({
...
});
// Later, when table needs to be refreshed
window.table.fnDestroy();
// depending on the version, maybe just .destroy() instead of .fnDestroy();
Maintenant, lancez l’appel que vous avez fait Initialement pour rétablir le tableau:
window.table = $('#TableID').dataTable({
...
});
Vous appelez à nouveau .dataTable()
sur la table, sans aucun argument.
Donc, si vous aviez fait quelque chose comme ça:
$('#someTable').dataTable({
someAttribue: someValue
});
Vous pouvez ensuite faire ceci pour l'actualiser:
$('#someTable').dataTable();
Ne l'appelle plus avec les arguments; ça n'aime pas ça.
Pour les nouvelles versions de Datatable, cela fera le travail:
var table = $('#yourDataTable').DataTable({...});
table.columns.adjust().draw();
Dans mon cas, je devais simplement le redessiner. Mais vous pouvez également effacer et ajouter de nouvelles données avant de redessiner.
var oTable = $('#groups').dataTable();
oTable.fnClearTable();
oTable.fnDestroy();
groupsList();