В ASP.net MVC Могу ли я обработать свою логику cshtml перед завершением действия контроллера? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть контроллер, у которого есть логика базы данных, возникающая в действии контроллера.Кроме того, я знаю, что это, вероятно, не идеально, но у меня есть некоторая логика, возникающая в моих взглядах.Это делает некоторые запросы SQL и, возможно, эти запросы могут обновлять записи.У меня есть транзакция, которую я открываю в начале действия моего контроллера.В попытке решить эту проблему я удерживал ее до вызова View () своего действия, надеясь, что логика представления будет выполнена до того, как мне придется зафиксировать транзакцию.Однако, похоже, это не работает, так как кажется, что он обрабатывает логику представления только после полного завершения действия контроллера.

ViewBag.Message = message;
                ViewBag.Test = test;

                var result = View();

                LegacyDataManager.Commit();
                Data.Commit();

                return result;
            }
            finally
            {
                LegacyDataManager.Stop();
                Data.CloseInstance();
            }

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

Моя конечная цель заключается в том, чтобы вся необходимая логика возникала до того, как я закрыл транзакцию.

Спасибо.

1 Ответ

7 голосов
/ 19 сентября 2019

В ASP.net MVC Могу ли я обработать свою логику cshtml перед завершением действия контроллера?

Нет.

Поток управления заключается в том, что контроллер выполняет свои действия.логика, а затем передает управление представлению, когда оно готово и готово к просмотру представления.

Похоже, корень проблемы в том, что у вас слишком много логики в вашем представлении.Например:

Это делает некоторые sql запросы, и потенциально эти запросы могут обновлять записи.

Это должно определенно не произойти в представлении.Представление просто отображает результат, не более того.Единственной логикой в ​​этом случае было бы условное отображение представления по-разному в зависимости от состояния модели.Он должен , а не иметь побочные эффекты за пределами рендеринга представления.

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

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