J'ai une table de données qui affiche correctement les données d'aperçu. J'ai ajouté un bouton qui devrait aller sur mon contrôleur et de là ouvrir une nouvelle vue affichant les détails de la ligne sélectionnée.
Le clic fonctionne, j'arrive à la méthode sur mon contrôleur. Mais ma vue détaillée ne s'ouvre pas.
Voici mon javascript:
[HttpGet] public ActionResult Details(int id) { return View(); }
Et voici le code dans mon contrôleur:
XXX
Quelqu'un peut-il me dire ce que je fais mal?
3 Réponses :
vous pouvez essayer:
$("#search-logs tbody").on('click', 'button', function () { var self = this; var tr = $(self).closest('tr'); var dtRow = datatable.row(tr[0]); var rowData = dtRow.data(); var processId = rowData[0]; location.href = '@Url.Action("Details","Logs")?id='+ processId; });
Le problème avec votre code est que vous appelez une fonction get ajax, qui renvoie une vue, au lieu d'une simple réponse HTTP. Pour afficher cette vue, vous devez rediriger votre page vers cette URL, au lieu de faire une requête ajax.
$("#search-logs tbody").on('click', 'button', function () { var self = this; var tr = $(self).closest('tr'); var dtRow = datatable.row(tr[0]); var rowData = dtRow.data(); var processId = rowData[0]; $.get("@Url.Action("Details","Logs")", { id: processId }, function(data, statusText, xhr){ if(xhr.status == 200) location.href = '@Url.Action("Details","Logs")?id='+ processId; else alert('Sorry, this id does not exist'); }); });
Aussi si vous souhaitez toujours utiliser get request, principalement pour vérifier si l'ID existe comme il peut renvoyer 404 Not found, vous pouvez utiliser la fonction ajax comme ceci,
$("#search-logs tbody").on('click', 'button', function () { var self = this; var tr = $(self).closest('tr'); var dtRow = datatable.row(tr[0]); var rowData = dtRow.data(); var processId = rowData[0]; location.href = '@Url.Action("Details","Logs")?id='+ processId; });
Vous pouvez ouvrir le lien construit dans une nouvelle fenêtre ou charger dans la fenêtre courante
// ouvre une nouvelle fenêtre
window.open (newUrlCreated, '_blank');
// s'ouvre dans la fenêtre courante
window.open (xhr.data);
window.location.href=newUrlCreated;
function operate(selectedRow, data, ...){ //logic of button for row }
there are a lot of ways to achieve that. You can add an onclick="operate(row['info'], row['info'])" to your button which calls a function with specified data from the datatable row, you will not bother to search for clicked button and row.