Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.net MVC中,我可以在完成控制器操作之前通过cshtml逻辑进行处理吗?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 在ASP.net MVC中,我可以在完成控制器操作之前通过cshtml逻辑进行处理吗?

C# 在ASP.net MVC中,我可以在完成控制器操作之前通过cshtml逻辑进行处理吗?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个控制器,它的数据库逻辑发生在控制器操作中。此外,我知道这可能并不理想,但我有一些逻辑发生在我的观点。这会执行一些sql查询,这些查询可能会更新记录。我有一个在控制器操作开始时打开的事务。为了解决这个问题,我将它保留到我的操作的View()调用之后,希望在我提交事务之前视图逻辑能够执行。但是,这似乎不起作用,因为它似乎只在控制器的操作完全完成后处理视图逻辑 ViewBag.Message = message; ViewBag.Test = test;

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

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

                var result = View();

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

                return result;
            }
            finally
            {
                LegacyDataManager.Stop();
                Data.CloseInstance();
            }
另一种解决方案是,在视图逻辑结束之前,我推迟执行事务的关闭,但这似乎比我目前正在尝试的更加错误

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

谢谢

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

没有

控制流是控制器执行其逻辑,然后在完成并准备渲染视图时将控制传递给视图

听起来问题的根源在于你的观点有太多的逻辑性。例如:

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

从某种角度来看,这绝对不应该发生。视图仅渲染结果,仅此而已。其中唯一的逻辑是根据模型的状态有条件地以不同的方式呈现视图。在渲染视图之外,它不应有副作用

当前的设计从根本上讲是有缺陷的,最好的办法是纠正应用程序的设计,而不是强迫框架符合您的设计

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

没有

控制流是控制器执行其逻辑,然后在完成并准备渲染视图时将控制传递给视图

听起来问题的根源在于你的观点有太多的逻辑性。例如:

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

从某种角度来看,这绝对不应该发生。视图仅渲染结果,仅此而已。其中唯一的逻辑是根据模型的状态有条件地以不同的方式呈现视图。在渲染视图之外,它不应有副作用


当前的设计存在根本性缺陷,您最好的选择是纠正应用程序的设计,而不是试图强制框架符合您的设计。

在构建视图时,执行已离开控制器。“这可能不理想”-视图中有数据库逻辑是MVC应用程序中最大的设计缺陷之一。在构建视图时,执行已经离开控制器。“这可能不理想”-视图中有数据库逻辑是MVC应用程序中最大的设计缺陷之一。我理解并同意这一点。但我有一个问题:在我将所有逻辑移到控制器之后,仍然有可能发生错误。在构建视图时,可能在for循环中索引的值为1。在那一点上如何回滚?在我看来,我想回滚,因为用户可能会按refresh,我不希望逻辑再次执行。但我也希望视图能够渲染。我的担心有意义吗?或者你可能知道我遗漏了一个替代方案吗?@misterbee180:当你渲染视图时,没有什么可以“回滚”的了。操作已执行,结果已返回。视图仅向用户显示该结果。在显示结果时可能会发生错误(例如关于返回记录的错误假设,导致使用无效索引或空引用异常),但是,在控制器中执行的操作已经成功执行。因此,如果是这种情况,我现在是否需要编写逻辑来检查特定步骤是否尚未发生,如果是,则在不可避免地按下刷新时不执行操作?这似乎是一个可能的安全措施,但如果这也是一个错误的方法,我最好不要这样做。@misterbee180:你问的不太清楚。这听起来像是你在思考问题,而且可能比问题中提到的更依赖于你观点中的逻辑。控制器动作执行操作,视图显示结果。就这么简单。也许你可以举一个不适合那个模具的例子,我的控制器正在更新很多东西。目前的想法是,如果你来到这个页面,执行逻辑并显示结果。所以我关心的是在查看过程中发生了一个错误,用户按下刷新,现在控制器逻辑再次启动,开始构建、更新东西,等等。除非我完全重新编写数据库存储东西的方式,否则目前无法知道已经执行了工作。我明白这一点并同意。但我有一个问题:在我将所有逻辑移到控制器之后,仍然有可能发生错误。在构建视图时,可能在for循环中索引的值为1。在那一点上如何回滚?在我看来,我想回滚,因为用户可能会按refresh,我不希望逻辑再次执行。但我也希望视图能够渲染。我的担心有意义吗?或者你可能知道我遗漏了一个替代方案吗?@misterbee180:当你渲染视图时,没有什么可以“回滚”的了。操作已执行,结果已返回。竞争对手