首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MVC中使用ChildActionOnly

在MVC中使用ChildActionOnly
EN

Stack Overflow用户
提问于 2012-04-21 05:25:24
回答 4查看 104.6K关注 0票数 171

什么时候会使用attribute ChildActionOnly?什么是ChildAction?在什么情况下,您希望限制使用此属性的操作?

EN

回答 4

Stack Overflow用户

发布于 2012-04-21 05:26:49

如果您在任何视图中使用RenderAction,通常用于呈现局部视图,则可以使用它。

使用[ChildActionOnly]标记它的原因是你需要控制器方法是公共的,这样你就可以用RenderAction调用它,但是你不希望有人能够导航到一个网址(例如/ controller /SomeChildAction)并直接看到该操作的结果。

票数 75
EN

Stack Overflow用户

发布于 2017-02-15 05:53:06

仅供参考,ASP.NET MVC核心中不提供ChildActionOnly。查看一些信息here

票数 11
EN

Stack Overflow用户

发布于 2016-12-22 00:36:04

去派对有点晚了,但是...

其他答案很好地解释了[ChildActionOnly]属性的作用。然而,在大多数示例中,我一直在问自己,当您可以直接在视图中呈现@Html.Partial("_MyParialView")时,为什么还要创建一个新的操作方法来在另一个视图中呈现局部视图。它看起来像是一个不必要的层。然而,随着我的研究,我发现一个好处是子操作可以创建一个不同的模型,并将其传递给部分视图。局部视图所需的模型可能在渲染局部视图的视图的模型中不可用。您可以调用子操作并让操作方法负责创建部分视图所需的模型,而不是修改模型结构来获取必要的对象/属性。

这可以派上用场,例如,在_Layout.cshtml中。如果您有一些对所有页面都通用属性,则实现此目的的一种方法是使用一个基本视图模型,并让所有其他视图模型继承它。然后,_Layout可以使用基本视图模型和公共属性。缺点(这是主观的)是,所有视图模型都必须从基本视图模型继承,以保证这些公共属性始终可用。另一种方法是在这些常见的地方呈现@Html.Action。操作方法将为所有页面所共有的部分视图创建一个单独的模型,这不会影响“主”视图的模型。在这种情况下,_Layout页面不需要模型。因此,所有其他视图模型都不需要从任何基本视图模型继承。

我确信使用[ChildActionOnly]属性还有其他原因,但这对我来说似乎是一个很好的理由,所以我想我应该分享一下。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10253769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档