什么时候会使用attribute ChildActionOnly
?什么是ChildAction
?在什么情况下,您希望限制使用此属性的操作?
发布于 2012-04-21 05:26:49
如果您在任何视图中使用RenderAction
,通常用于呈现局部视图,则可以使用它。
使用[ChildActionOnly]
标记它的原因是你需要控制器方法是公共的,这样你就可以用RenderAction
调用它,但是你不希望有人能够导航到一个网址(例如/ controller /SomeChildAction)并直接看到该操作的结果。
发布于 2017-02-15 05:53:06
仅供参考,ASP.NET MVC核心中不提供ChildActionOnly。查看一些信息here
发布于 2016-12-22 00:36:04
去派对有点晚了,但是...
其他答案很好地解释了[ChildActionOnly]
属性的作用。然而,在大多数示例中,我一直在问自己,当您可以直接在视图中呈现@Html.Partial("_MyParialView")
时,为什么还要创建一个新的操作方法来在另一个视图中呈现局部视图。它看起来像是一个不必要的层。然而,随着我的研究,我发现一个好处是子操作可以创建一个不同的模型,并将其传递给部分视图。局部视图所需的模型可能在渲染局部视图的视图的模型中不可用。您可以调用子操作并让操作方法负责创建部分视图所需的模型,而不是修改模型结构来获取必要的对象/属性。
这可以派上用场,例如,在_Layout.cshtml
中。如果您有一些对所有页面都通用属性,则实现此目的的一种方法是使用一个基本视图模型,并让所有其他视图模型继承它。然后,_Layout
可以使用基本视图模型和公共属性。缺点(这是主观的)是,所有视图模型都必须从基本视图模型继承,以保证这些公共属性始终可用。另一种方法是在这些常见的地方呈现@Html.Action
。操作方法将为所有页面所共有的部分视图创建一个单独的模型,这不会影响“主”视图的模型。在这种情况下,_Layout
页面不需要模型。因此,所有其他视图模型都不需要从任何基本视图模型继承。
我确信使用[ChildActionOnly]
属性还有其他原因,但这对我来说似乎是一个很好的理由,所以我想我应该分享一下。
https://stackoverflow.com/questions/10253769
复制相似问题