Я уже некоторое время играю с различными аспектами 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: похоже, никто не знает ответ на этот вопрос ... Значит ли это, что нет никакого способа сделать это, или вы просто не знаете, ребята?