ASP.NET MVC AJAX с jQuery

У меня есть сайт, на котором страница каждого пользователя показывает комментарии и позволяет другим пользователям добавлять комментарии. Я хочу, чтобы форма добавления комментариев была на странице, и когда пользователь добавляет комментарий, он добавляется в базу данных и отображается в разделе комментариев с помощью AJAX. Я использую jQuery для AJAX и LINQ to SQL для обработки логики базы данных. Как это сделать, чтобы после добавления комментария в базу данных раздел комментариев обновлялся и обновлялся без обновления страницы?

Ответов (2)

Решение

Вам нужно будет воспользоваться событием «успех» (или «завершено»), которое запускается вызовом 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();                    
            }
        }
    });

ИЗМЕНИТЬ Код JSON будет использовать плагин jquery jquery-json ( http://code.google.com/p/jquery-json/ )

По словам Мэтта, другой способ отправки данных формы - вместо JSON вы можете вызвать $ ('# form'). Serialize () в поле 'data' функции jQuery.ajax. Это устранит необходимость в плагине.

Кроме того, я не эксперт в этом вопросе, но все еще пытаюсь изучить его сам, но необходимо ли иметь как POST, так и GET-запрос, если вместо этого вы можете вставить ответ от ASP.NET MVC на страницу? Это приведет к одному запросу. Однако для такого подхода может быть веская причина. Думаю, мой будет выглядеть так:

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


        }
    }
    });