В ASP.NET MVC, как лучше всего спроектировать / кодировать асинхронную частичную обратную передачу <DIV> - PullRequest
2 голосов
/ 30 декабря 2010

В представлении MVC (.aspx), заключенном в форму, есть несколько элементов управления - сетки, текстовые поля - которые отображают данные, относящиеся к субъекту, человеку. Форма не требует кнопку отправки, потому что большая часть данных предназначена только для просмотра. Однако есть сетка (Telerik MVC), которая отображает комментарии. Пользователь должен иметь возможность добавить комментарий - в текстовое поле - и этот комментарий должен появиться в сетке. Поскольку данные комментариев поступают из двух разных источников в базе данных и объединяются в хранимой процедуре, я не могу использовать встроенное редактирование сетки.

Вопрос 1.

Возможно ли асинхронно отправить обратно только что содержимое упаковочного DIV - то есть текстовое поле с новым комментарием - в контроллер без полной обратной передачи формы и мерцания страницы?

Спасибо

Арнольд

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Вы можете создать кнопку, которая будет "отправлять" содержимое текстового поля (новый комментарий) в действие контроллера, используя функцию публикации jQuery / JavaScript, которая появляется при нажатии кнопки.

Действие контроллера может затем сохранить новый комментарий в конкретной базе данных, и если вы добавите метод «success» после этого, вы можете просто вызвать ajaxRequest () для обновления сетки.

    $("#submitButton").click(function () {

    var comment = $("#commentTextbox").val();

    $.ajax({ type: "POST",
                    url: "/Controller/UpdateCommentsGrid",
                    datatype: "json",
                    traditional: true,
                    data:
                          {
                              'comment': comment                      
                          },
                    success: function () {
                        var grid = $('#YourGridName').data('tGrid');
                        grid.ajaxRequest();
                    }
                });

    });

Надеюсь, это поможет.

0 голосов
/ 30 декабря 2010

Да, это возможно. Давайте возьмем в качестве примера следующую форму, где вы хотите разместить только второй DIV:

<form action="/foo" method="post">
    <div id="section1">
        <input type="text" name="item1" />
        <input type="text" name="item2" />
    </div>

    <div id="section2">
        <input type="text" name="item3" />
        <input type="text" name="item4" />
    </div>
</form>

, и вы можете отправить запрос AJAX следующим образом:

var form = $('#section2').wrap('<form/>').parent();
$.post('/foo', form.serialize(), function(result) {
    alert('successfully posted');
});
...