2009-02-23 9 views
19

J'ai un site où la page de chaque utilisateur affiche des commentaires et permet à d'autres utilisateurs d'ajouter des commentaires. Je veux l'avoir si le formulaire ajouter des commentaires est sur la page et quand un utilisateur ajoute un commentaire, il est ajouté à la base de données et apparaît dans la section des commentaires avec AJAX. J'utilise jQuery pour AJAX et LINQ to SQL pour gérer la logique de base de données. Comment s'y prendre pour que, après l'ajout du commentaire à la base de données, la section des commentaires soit rafraîchie et mise à jour sans actualiser la page?ASP.NET MVC AJAX avec jQuery

Répondre

22

Vous auriez besoin de tirer parti de l'événement 'success' (ou 'complete') lancé par l'appel ajax jQuery pour déclencher un appel AJAX suivant pour rafraîchir le contenu de vos avis. Cela ressemblerait probablement quelque chose comme (ailé il, non testé):

function UpdateComments(){ 
    resultHTML = jQuery.ajax({ 
     type: 'GET', 
     url: 'Comments/List/UserID' 
    }).responseText; 

    $('#comments').html(resultHTML); 
} 

function PostComment(targetUserID, commenterUserID, comment) 
jQuery.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: $.toJSON({review: comment, id:targetUserID, commenter:commenterUserID}), 
     dataType: 'json', 
     url: 'Comments/Add', 
     success: function(result){ 
      // Only update comments if the post was successful: 
      resultJson = $.evalJSON(result); 
      if(resultJson['success'] == true){ 
       UpdateComments();      
      } 
     } 
    }); 

EDIT Le code JSON serait d'utiliser le plugin jquery jquery-json (http://code.google.com/p/jquery-json/)

+2

l'URL doit être: «/Commentaires/Ajouter » ... sinon l'URL s'ajouté à l'URL actuelle et vous aurez fort probablement un 404. –

+1

En fait, il est probablement préférable d'utiliser l'un des assistants MVC pour générer le chemin, parce que le premier/lancera également des choses si votre site fonctionne comme une application imbriquée sous un autre site Web dans IIS – Matt

11

En réponse à Matt, une autre façon pour soumettre les données du formulaire, vous pouvez, à la place du JSON, appeler $ ('# form'). serialize() dans le champ 'data' de la fonction jQuery.ajax. Cela éliminerait le besoin d'un plugin.

Aussi, je ne suis pas un expert sur ce sujet, essayant toujours de l'apprendre moi-même, mais est-il nécessaire d'avoir une requête POST et GET quand vous pouvez insérer la réponse d'ASP.NET MVC dans la page ? Cela entraînerait une demande. Il y a peut-être une raison valable à cette approche. Je suppose que le mien ressemblerait à ceci:

// The Controller Action should return a PartialView as response, 
    // so just a user control that contains the comments. 
function PostComment(targetUserID, commenterUserID, comment) 
jQuery.ajax({ 
    type: 'POST', 
    data: $('#commentForm').serialize(), 
    url: 'Comments/Add', 
    success: function(result){ 
     $('#comments').html(result); 


     } 
    } 
    }); 
+0

Salut Julian - c'est un très bon point RE: combiner les nouveaux résultats de commentaire dans la réponse POST. Je suppose que cela se résume à quel point vous êtes puriste crud RESTful. Personnellement, je combinerais cela dans la réponse, pour sauver l'aller-retour, même si certains puristes pourraient en dire autrement. – Matt