在ASP.net MVC中,可以在完成控制器操作之前处理cshtml逻辑吗?

mis*_*180 0 c# asp.net asp.net-mvc

我有一个控制器,该控制器的控制器操作中发生数据库逻辑。另外,我知道这可能并不理想,但我的观点有一定逻辑。这会执行一些sql查询,并且可能这些查询可能会更新记录。我有一个在控制器操作开始时打开的事务。为了解决此问题,我将其保留到我的操作的View()调用之后,希望在必须提交事务之前执行视图逻辑。但是,这似乎不起作用,因为它似乎仅在控制器的动作完全完成后才处理视图逻辑。

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

                var result = View();

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

                return result;
            }
            finally
            {
                LegacyDataManager.Stop();
                Data.CloseInstance();
            }
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是,我推迟执行事务的关闭,直到视图逻辑结束为止,但这似乎比我目前尝试的还要错误。

我的最终目标是在关闭交易之前发生所有必要的逻辑。

谢谢。

Dav*_*vid 7

在ASP.net MVC中,可以在完成控制器操作之前处理cshtml逻辑吗?

没有。

控制流程是控制器执行其逻辑,然后在完成并准备呈现视图时将控制权传递给视图。

听起来问题的根源在于您的视图中逻辑太多。例如:

这会执行一些sql查询,并且可能这些查询可能会更新记录。

绝对不应该这样。视图仅呈现结果,仅此而已。其中的唯一逻辑是根据模型的状态有条件地不同地渲染视图。它应该不会有渲染视图的副作用之外。

当前的设计从根本上来说是有缺陷的,您最好的选择是更正应用程序的设计,而不是强迫框架适合您的设计。