控制器构造函数调用了Child Action

时间:2011-08-06 22:21:47

标签: asp.net asp.net-mvc asp.net-mvc-3

在我的MVC3应用程序中,我正在使用一些子操作(RenderAction())来填充我视图的两个部分。这有助于我保持代码更加模块化和可重用。问题是每个子操作都会再次调用控制器构造函数。

在我的控制器构造函数中,我对数据库进行了几次调用以获取用户数据。它们不是昂贵的呼叫,但是当每个子动作必须进行相同的呼叫时,它开始加起来。我正在向数据库发送重复的查询以获取相同的HTTP请求。

这是正常行为吗?我应该远离儿童行为吗?

1 个答案:

答案 0 :(得分:2)

- 这是正常行为。子操作遍历整个ASP.NET MVC处理管道,就像常规操作一样。

如果您想避免这种情况,请使用部分视图。当然,这样你就会失去在你的孩子行动中执行逻辑的能力。

如果您说“召唤几个孩子的行动”,并且“每个动作同样要求获取用户数据”,我认为您需要进行一些重构。也许您可以将这个“用户数据”调用放在子操作中,并应用输出缓存。如果您谈论“当前用户数据”,那么您也可以将其粘贴在表单身份验证票证中,并完全跳过数据库调用。在不了解情况的情况下,很难提供更多建议。

我要做的另一点是为什么要在构造函数中进行数据库调用?这是非常糟糕的做法。使用构造函数实例化成员并设置依赖关系,而不是检索数据。