0
votes

Datatable: cliquer sur le bouton n'ouvre pas la vue

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?


0 commentaires

3 Réponses :


2
votes

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;  
});


0 commentaires

1
votes

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;
});


0 commentaires

0
votes

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

  1. window.open (xhr.data);
  2. 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. 


0 commentaires