ASP.NET MVC и AJAX

12

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

Мне было интересно, что было бы лучшим способом добиться этого. Первая мысль заключалась в том, чтобы положить основную панель содержимого в частичную и иметь действие контроллера, которое вернет PartialView. Это не сработает, потому что поскольку действие возвращает только HTML главной панели, я не могу обновить верхний и нижний заголовки.

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

Я видел, что можно отобразить частичное представление строки, поэтому я подумал, что могу использовать эту технику в действии, чтобы вернуть объект JSON с 3 свойствами, представляющими HTML из 3 частичных элементов, которые мне нужно обновить. Но это похоже на очень неправильный подход ко мне, если это возможно вообще.

Еще одна идея, которую я получил, - вернуть объект JSON, содержащий только данные, необходимые для частичных, и использовать javascript для построения HTML. Но создание пользовательского интерфейса в javascript выглядит сложной задачей (основное содержимое частично использует MvcContrib GridView с поиском и сортировкой).

Поэтому я был бы очень признателен за предложения о том, какой был бы самый чистый подход для обработки такого сценария. Также было бы удобно адаптивное решение: например, если пользователь имеет javascript отключил бы, просто перезагрузив всю страницу без AJAX.


UPDATE:

Andrew Siemer предложил разместить каждый раздел в своем собственном частичном представлении и выполнить несколько запросов ajax. Это похоже на совершенно правильный подход, но, к сожалению, он не применим в моем сценарии из-за следующей детали, которую я пропустил в своем первоначальном описании проблемы: верхний заголовок фактически используется для отображения сообщений об ошибках/информации о событиях, происходящих на главной панели. Так, например, мне нужно показать сообщение об ошибке в случае возникновения исключения при извлечении модели для главной панели. Таким образом, только один запрос может быть сделан для обновления этих двух панелей.

  • 0
    не могли бы вы взглянуть на это: stackoverflow.com/questions/7086440/… pls (понятия не имею, как связаться с вами напрямую) :) thnx
Теги:
asp.net-mvc

4 ответа

9
Лучший ответ

Вы можете легко разместить каждый раздел в своем собственном частичном представлении. После этого вы сможете сделать запрос jquery для каждого представления после того, как ваши данные будут отправлены/изменены. Затем каждый вызов может быть перенесен в соответствующий раздел. Это очень удобно и звучит как соответствующий путь.

Я бы не ожидал, что ваш контроллер вернет несколько частичных представлений... так как это сломает SRP!

Обновление. Следуя вашему обновлению... вы все равно можете получить разделы отдельно. Это просто требует немного больше удовольствия от аякса с вашей стороны в том, что каждая выборка может вернуть кусок ошибки (посредством запроса JSON). Если возникнет какая-либо ошибка, эти сообщения об ошибках могут отображаться в заголовке. Или... вы можете сделать запрос заголовка последним для ошибок, как только все остальные запросы будут отправлены обратно, и в этом случае каждое частичное представление может передать его сообщениям об ошибках в переменную сеанса для состояния ошибки... и затем показать эти сообщения в заголовок.

Большая причина выбора для каждого раздела, поскольку его собственный раздел, а не один uber-запрос, может еще не проявиться в первоначальном дизайне. Когда каждый раздел управляется отдельно, вы можете делать такие необычные вещи, как кеширование каждой секции независимо, предоставление более частых обновлений в одной области над другой и т.д.

  • 0
    Спасибо за отзыв Андрей. К сожалению, я упустил важную деталь в своем первоначальном описании, поэтому боюсь, что это предложение не может быть применено в моем сценарии. Я обновил свой вопрос соответственно.
0

Я знаю, что на этот вопрос был дан ответ, но я подумал, что просто поставлю предложение:

  • Шаблоны Backbone.js и jQuery могут легко решить ваши проблемы.

(Просто оставим это здесь как предложение для людей, читающих этот вопрос)

0

Как насчет включения вашего верхнего и правого вида в скрытые divs на вашем основном представлении и перемещения их в правильные места при загрузке?

0

Это сложно. Как насчет этого?

Настройте частичный запрос для каждого верхнего, левого и верхнего компонентов, каждый из которых возвращает частичное представление с данными, необходимыми для этой области. Затем каждый раз, когда на главной панели происходит событие, начинайте обновлять частичные файлы в каждой области, чтобы обновить их.

В качестве альтернативы вы можете использовать их на фиксированных таймерах для опроса новых данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню