Конструктор контроллера вызвал дочернее действие - PullRequest
2 голосов
/ 07 августа 2011

В моем приложении MVC3 я использую некоторые дочерние действия (RenderAction ()), чтобы заполнить 2 части моего представления. Это помогает мне сделать код более модульным и многократно используемым. Проблема в том, что конструктор контроллера вызывается снова для каждого дочернего действия.

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

Это нормальное поведение? Должен ли я держаться подальше от детских действий?

1 Ответ

2 голосов
/ 07 августа 2011

Да - это нормальное поведение. Дочерние действия проходят весь конвейер обработки ASP.NET MVC, как и обычные действия.

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

Если вы говорите, что «вызываете несколько дочерних действий» и «каждое действие выполняет один и тот же вызов для получения пользовательских данных», я думаю, вам нужно провести некоторый рефакторинг. Возможно, вы могли бы поместить этот вызов «пользовательских данных» в дочернее действие и применить кеширование вывода. Если вы говорите о «текущих пользовательских данных», то вы также можете вставить их в квитанцию ​​проверки подлинности форм и вообще пропустить вызов БД. Трудно дать больше советов, не зная больше о ситуации.

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

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