2009-02-23 26 views
19

各ユーザーのページにコメントが表示され、他のユーザーがコメントを追加できるサイトがあります。私はそれを持っているので、コメントの追加フォームがページにあり、ユーザーがコメントを追加すると、それがデータベースに追加され、AJAXのコメントセクションに表示されます。私はAJAXのためにjQueryを使用しており、LINQ to SQLはデータベースロジックを処理しています。コメントをデータベースに追加した後、コメントセクションを更新し、ページを更新せずに更新できるように、どうすればよいでしょうか?jQueryを使用したASP.NET MVC AJAX

答えて

22

「成功」(または「完了」)イベントを利用する必要があります。このイベントは、jQuery ajax呼び出しによって起動され、レビューの内容を更新するための後続の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();      
      } 
     } 
    }); 

をEDIT JSONコードは、マットに応じて別の方法をjQueryプラグインのjQueryの-JSON(http://code.google.com/p/jquery-json/

+2

URLは次のようになります。「/コメント/追加」...そうでないURLが現在のURLに付加されますし、あなたが最も可能性が高い実際には404 –

+1

を取得します、あなたのサイトがIIS内の別のWebサイトのネストされたアプリケーションとして動作している場合、先行する/はまた物事を捨てるので、実際にはパスを生成するためにMVCヘルパーの1人を使用する方が良いでしょう。 – Matt

11

を利用するだろうフォームデータを送信するには、JSONではなく、jQuery.ajax関数の 'data'フィールドで$( '#form')。serialize()を呼び出すことができます。これにより、プラグインが不要になります。

また、私はこの問題について専門家ではなく、自分でそれを学習しようとしていますが、代わりにPOSTとGETの両方の要求を持つ必要があります。 ?これにより、1つの要求が発生します。しかし、そのアプローチには正当な理由があるかもしれません。私は私はこのようになります推測:

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

こんにちはJulian - それは非常に良い点ですRE:新しいコメント結果をPOST応答に結合する。私はそれがあなたがどれほどRESTfulな潔白な純粋主義者であるかにまでこだわると思います。個人的には、たとえ純粋主義者がそうでないと主張するかもしれないが、私は往復を救うために、それを応答に組み合わせるだろう。 – Matt

関連する問題