2009-02-23 114 views
19

我有一个网站,每个用户的页面显示评论,并允许其他用户添加评论。我想拥有它,因此添加评论表单位于页面上,当用户添加评论时,它会添加到数据库中,并使用AJAX注释部分显示。我使用jQuery来处理AJAX和LINQ to SQL来处理数据库逻辑。如何做到这一点,以便在评论添加到数据库后,评论部分刷新和更新而不刷新页面?ASP.NET MVC AJAX与jQuery

回答

22

您需要利用jQuery ajax调用激发的'success'(或'complete')事件来触发随后的AJAX调用,以刷新评论的内容。这可能会是这个样子(翅它,未经测试):

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

编辑的JSON代码会利用jQuery插件jQuery的JSON(http://code.google.com/p/jquery-json/

+2

的URL应该是:“/评论/添加” ......否则,URL被附加到当前的网址,你将最有可能获得404 – 2010-01-20 15:35:08

+1

事实上,使用其中一个MVC帮助程序来实际生成路径可能会更好,因为如果您的站点在IIS中的另一个网站下作为嵌套应用程序运行,则领导/还会抛出一些东西 – Matt 2010-10-01 14:30:15

11

的回应马特,另一路要提交表单数据,而不是JSON,可以在jQuery.ajax函数的'data'字段中调用$('#form')。serialize()。这将消除对插件的需求。

此外,我不是这方面的专家,仍然试图自己学习它,但是当您可以将ASP.NET MVC的响应插入到页面中时,需要同时具有POST和GET请求?这会导致一个请求。尽管这种方法可能有一个合理的理由。我想我的应该是这样的:

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


     } 
    } 
    });