Форма комментариев Ajax в ASP.NET MVC2, как? - PullRequest
1 голос
/ 24 апреля 2010

Я уже некоторое время играю с различными аспектами MVC, и я попал в ситуацию, когда я не уверен, что будет лучшим способом решения проблемы. Я надеюсь, что Сообщество SO поможет мне здесь: P

Я видел несколько примеров Ajax.BeginForm в Интернете, и это кажется очень изящной идеей. Например. у вас есть раскрывающийся список, в котором вы выбираете клиента - и при выборе одного из них он загружает данные этого клиента в некоторый заполнитель на странице. Это прекрасно работает.

Но что делать, если вы хотите добавить некоторую проверку в поле?

Просто гипотетически представьте страницу статьи и комментарии пользователей внизу. Под областью комментариев есть ajax-y "Добавить комментарий". Когда пользователь добавляет комментарий, он появляется в области комментариев под последним комментарием.

Если я установлю Ajax.BeginForm для добавления результата вызова в область комментариев, он будет работать нормально. Но что, если опубликованные данные недействительны? Вместо добавления «успешного» комментария в область комментариев я должен показать ошибки проверки пользователя.

В этот момент я решил, что область ВНУТРИ Ajax.BeginForm будет внутри части, и отправка формы вернет эту часть. Проверка работает отлично. При каждой отправке мы перезагружаем содержимое внутри элемента формы. Но как добавить успешный комментарий в топ?

Другие замечания: в форме комментария также есть кнопка «Предварительный просмотр». Когда пользователь нажимает на Предварительный просмотр, я должен загрузить предоставленный комментарий в окно предварительного просмотра. Это, вероятно, будет также в области формы.

Я думал об использовании результатов Json. Когда пользователь отправляет форму, серверный код сгенерирует объект Json со значением Success и html-отображаемыми частями в качестве некоторых свойств. Что-то вроде

{ "success": true, "form": "<html form data>", "comment": "successful comment html to inject into the page" }

Это было бы идеальным решением, за исключением того, что в MVC нет способа визуализировать частичное в строку внутри контроллера (разделение контекста, помните?).

UPD: похоже, никто не знает ответ на этот вопрос ... Значит ли это, что нет никакого способа сделать это, или вы просто не знаете, ребята?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

После более тщательного изучения и получения опыта работы с MVC я решил разобраться в проблеме и пришел к следующему выводу. Не уверен, что кто-нибудь найдет это полезным

  1. С Ajax.BeginForm, который требует проверки поля, возврат от отправки должен вернуть html формы. Таким образом, если проверка не удалась - ответ будет содержать сообщения об ошибках, и интерфейс будет выглядеть безупречно. Результат также, скорее всего, будет содержать всю форму, включая ее объявление.

  2. Предварительный просмотр в этом случае является простой проблемой. Когда пользователь нажимает кнопку предварительного просмотра, форма может быть опубликована, и результат будет содержать заполненную форму + окно предварительного просмотра. В качестве альтернативы, кнопка «Предварительный просмотр» может быть Ajax.LinkButton, который будет сериализовать форму, опубликовать данные на сервере, который отобразит их в комментарии. Затем js на стороне клиента поместит этот предварительный просмотр в требуемый контейнер.

  3. При успешной отправке существует несколько вариантов в зависимости от требований и макета.
    a) В результате отправки формы можно вернуть комментарий + пустую форму (готов к новому комментарию) например когда форма комментария находится ниже всех комментариев, это будет выглядеть так, как если бы комментарий был добавлен внизу формы
    b) Результат может содержать пустую форму + небольшой js-скрипт, который обновит область комментариев / загрузит последний комментарий на страницу
    c) Также можно принудительно обновить родительскую страницу, чтобы гарантировать, что вновь опубликованный комментарий будет сразу же виден пользователю.

    В основном этот выбор зависит от требований конкретного случая.

0 голосов
/ 01 ноября 2010

Вот пример того, как публиковать сообщения с помощью jQuery и как бороться с ошибками при проверке.

http://jvance.com/blog/2010/02/20/MakingAnAjaxFormWithJQueryInASPdotNETMVC.xhtml

...