2009-02-23 37 views
19

Tengo un sitio donde la página de cada usuario muestra comentarios y permite que otros usuarios agreguen comentarios. Quiero tenerlo para que el formulario para agregar comentarios esté en la página y cuando un usuario agregue un comentario, se agregue a la base de datos y se muestre en la sección de comentarios con AJAX. Estoy usando jQuery para AJAX y LINQ to SQL para manejar la lógica de la base de datos. ¿Cómo haría esto para que después de agregar el comentario a la base de datos, la sección de comentarios se actualice y actualice sin actualizar la página?ASP.NET MVC AJAX con jQuery

Respuesta

22

Debería aprovechar el evento de 'éxito' (o 'completo') que se activa con la llamada jQuery ajax para activar una llamada AJAX posterior para actualizar el contenido de sus revisiones. Esto probablemente se vería algo así como (alado que, no probado):

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

EDITAR El código JSON haría uso del plugin de jQuery jQuery-JSON (http://code.google.com/p/jquery-json/)

+2

la URL debe ser: '/ Comentarios/Add' ... de lo contrario la url se añade a la URL actual y lo más probable es obtener una –

+1

404. De hecho, probablemente sea mejor usar uno de los ayudantes de MVC para generar la ruta, porque el líder/también lanzará cosas si su sitio está operando como una aplicación anidada en otro sitio web en IIS – Matt

11

En respuesta a Matt, otra forma para enviar los datos del formulario, en lugar de JSON, puede llamar a $ ('# form'). serialize() en el campo 'datos' de la función jQuery.ajax. Esto eliminaría la necesidad de un complemento.

Además, no soy un experto en este tema, sigo intentando aprenderlo yo mismo, pero ¿es necesario tener una solicitud POST y GET cuando podría insertar la respuesta de ASP.NET MVC en la página en su lugar? ? Esto daría como resultado una solicitud. Sin embargo, puede haber una razón válida para ese enfoque. Creo que la mina se vería así:

// 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

Hola Julián: ese es un muy buen punto RE: combina los nuevos resultados de comentarios en la respuesta POST. Supongo que se reduce a la cantidad de puritador RESTful que eres. Personalmente, lo combinaría en la respuesta, para guardar el viaje de ida y vuelta, aunque algunos puristas podrían argumentar lo contrario. – Matt