Обновлять разные части страницы MVC одновременно? - PullRequest
2 голосов
/ 16 января 2010

Я хочу обновить различные области моей страницы MVC после одного действия (скажем, щелчка).

как, я использую ajax, и обертывание всей области, где все эти части должны быть обновлены, является интуитивно понятным, поскольку отправляемые обратно данные ajax будут близки ко всей странице.

Итак, у меня есть несколько частичных представлений, но проблема в том, что каждое действие возвращает только одно представление! Как я могу вернуть несколько просмотров из этого одного действия?

Я знаю, что популярное решение - просто забить сервер несколькими асинхронными javascript-запросами ajax javascript для каждой «части» представления, но это действительно ненужно и неэффективно, восстанавливая и уничтожая страницу (скажем) 5 раз за один раз. действие, когда оно должно произойти только один раз, и когда это произойдет, сервер должен тут же управлять всеми частичными представлениями.

У кого-нибудь есть идеи? я в отчаянии.

Хотя новичок в среде MVC, я уверен, что должно существовать элегантное решение, так как я верю в ребят из MVC, конечно же, мы не должны DDoS-сервер для чего-то подобного?

Ответы [ 3 ]

2 голосов
/ 16 января 2010

Один из возможных подходов - создать пакетное действие, которое вызовет ваш скрипт. Это действие внутренне вызовет все частичные представления, когда обернет их результаты в объект JSON. На стороне клиента ваш сценарий развернет результаты частичного просмотра и поместит их в нужные места на странице.

Однако есть несколько ограничений такого подхода (и того, что вы хотите сделать в целом):

  • сделает кеш браузера бесполезным. Поскольку вы не знаете, какое из частичных представлений могло измениться, ответ пакетного действия не должен кэшироваться. С другой стороны, если вам нужно сделать несколько вызовов для каждого частичного представления, каждый из них может контролировать свое кэширование, что потенциально может привести к значительной экономии пропускной способности.
  • Вы искусственно замедляете клиента. Ваш сетевой запрос займет время, необходимое для обработки всех частичных представлений, отображаемых на стороне сервера в одном потоке (если только вы не попытаетесь раскрутить несколько потоков и выполнить вызовы параллельно.). С другой стороны, если вы делаете несколько вызовов для каждого частичного просмотра, браузер может выполнить несколько из них одновременно, что распараллелит задачу для вас. И поскольку каждая часть страницы будет обновляться по мере ее возвращения, общее восприятие пользователя может быть на самом деле лучше.
  • у вас болит балансировка нагрузки. Если вы балансируете нагрузку на несколько серверов, несколько запросов могут оказаться на разных серверах, что повышает время отклика.

Честно говоря, если вы собираетесь обновить несколько частей страницы, но хотите пакетировать эту операцию, вы также можете прекратить использование Ajax и просто перезагрузить полную страницу.

0 голосов
/ 18 января 2010

Я бы сказал, что отправка назад html из вызова ajax - плохая практика.На мой взгляд, лучший вариант - отправить обратно json и использовать эти данные для создания html-клиентской части.Для создания html вы можете использовать шаблонизатор javascript, такой как jtemplates (если вы используете jquery).

Данные json могут быть отправлены одним действием, если вам так нравится.Но это зависит от того, какие данные это.Если это очень разные части, вы, вероятно, должны разделить его или вообще не использовать ajax, так как в любом случае вы обновляете большую часть страницы.

0 голосов
/ 16 января 2010

Вы можете включить частичные виды в другой вид, просто используйте помощник HTML.RenderPartial.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...