【问题标题】:ASP.NET MVC Using actions as partial viewsASP.NET MVC 使用动作作为局部视图
【发布时间】:2013-06-21 09:20:12
【问题描述】:

我有一个视图可以加载其他几个局部视图,根据需要将数据从原始视图的模型传递到局部视图。

我的问题是,我应该创建单独的控制器(代表不同的 db 对象)并使用Html.RenderAction() 从原始视图加载部分视图,还是可以一次完成所有业务逻辑,把它进入我的视图模型,并使用Html.Partial()加载部分视图?

如果我创建了单独的控制器并使用了Html.RenderAction(),那么除了原始视图(所有的操作都是局部视图)之外,这些操作将无法在任何地方访问,所以这样做似乎很奇怪。

我仍然有其他控制器充当网站的端点,但这似乎是另一种情况,创建更多具有部分视图操作的控制器似乎没用。

这里有一些标准做法,还是只是目前的偏好?

【问题讨论】:

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


    【解决方案1】:

    您不应该使用 Html.RenderAction(),因为这会创建一个新的 MVC 管道,这会对性能产生不利影响。您通常应该使用 Html.Partial() 或 Html.RenderPartial()。至于创建单独的控制器,它真的取决于你的场景。如果这些部分操作应该与该控制器进行逻辑分组,我会将它们放在那里,但如果控制器变得过于单一,或者您的部分操作可能是显示在您网站的许多不同区域上的某种小部件,那么放置它们可能会很好它们在一个单独的 WidgetController 中。

    总结:使用 Html 部分帮助程序来避免额外的 MVC 管道,决定在您的特定情况下对部分使用哪个控制器是有意义的。

    编辑:我记错了 Action 和 Partial 方法之间的区别。尽可能使用 Partial() 和 RenderPartial()。这些确实避免了创建另一个管道;缺点是您确实需要获取主要操作中返回的所有信息并通过父视图传递。 Action() 和 RenderAction() 在性能方面比较重,但是它们可以用来调用外部的控制器和动作,允许你在必要时分离你的逻辑。

    【讨论】:

    • 感谢您的帮助。您如何看待创建一个控制器,其操作只返回部分视图,并且只从一个地方(即特定视图)调用。当然这意味着不需要那个控制器,只需要使用 RenderPartial(),对吗?
    • 是的,这种情况只需要使用 renderpartial()。恐怕我可能记错了这两种方法之间的区别,似乎 RenderPartial 和 Partial 必须立即提供数据,在这种情况下,主控制器将负责。现在更新我的答案。
    • 我还要补充一点,如果您决定采用 Ajax 路线,创建部分操作/视图是有利的。我还建议使用ChildActionOnly Attribute 来减少您的安全面(如果需要)。
    • 太棒了!我将让主控制器处理所有业务逻辑,并简单地将其他视图呈现为原始视图的部分视图(而不是来自不同操作/控制器的部分视图)。
    猜你喜欢
    • 2010-11-25
    • 2019-10-03
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多