ASP.NET MVC, поддержание состояния модели между запросами Ajax - PullRequest
4 голосов
/ 08 марта 2010

проблема: При первом полностраничном запросе мой контроллер вызывает уровень ApplicationServices Layer (прокси-сервер веб-службы для моего бизнес-уровня), чтобы заполнить коллекцию текущих служб, которая хранится в моем собственном свойстве базового класса контроллера. Это должно быть отображено в представлении. Все в контексте этого контроллера имеет доступ к этой «коллекции служб». Теперь, когда я выполняю дополнительные вызовы того же метода действия через вызов AJAX, я, очевидно, обращаюсь к другому экземпляру этого контроллера, что означает, что моя коллекция служб пуста.

Итак, кроме повторного получения всей коллекции, где я буду хранить эту коллекцию, чтобы она сохранялась между запросами ajax? Должен ли я сохранить его как отдельный объект DomainModel, объект Session? .... поскольку ViewData не работает для меня. Извините за невежество MVC:)

Любая помощь будет принята с благодарностью:)

1 Ответ

2 голосов
/ 08 марта 2010

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

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

AJAX делает еще один шаг вперед: идея AJAX заключается в том, что простая операция удаления может быть реализована как таковая, т.е. вам нужно только авторизоватьсяи выполнить один очень маленький запрос на уровне постоянства.Вот и все.Вам даже не нужно передавать измененную страницу обратно пользователю.Достаточно простого машиночитаемого индикатора успеха / ошибки через JSON.

Если вы начнете использовать множество сервисов для небольших запросов AJAX, вы действительно потеряете большую часть того, для чего он хорош.

Я бы также предложил вам не хранить кучу сервисов в базовом контроллере.Скорее всего, для большинства запросов вам понадобится лишь небольшая их часть.Рекомендуется использовать только те услуги, которые вам абсолютно необходимы.

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