出于好奇,这两个属性之间的区别是什么?
NonAction和ChildActionOnly
这两个属性对我来说似乎都是一样的。阻止管道(动作调用者)调用动作方法。请看一下这个片段:
[NonAction]
private ActionResult StackOverflow1()
{
// Omitted for brevity.
return View();
}
[ChildActionOnly]
private ActionResult StackOverflow2()
{
// Omitted for brevity.
return View();
}
当然这两种方法都不会被调用,因为它们是私有的 - 至少在默认情况下是这样 - 但我想知道差异只是出于好奇......
答案 0 :(得分:5)
ChildActionOnly - 只能通过其他操作调用,而不能直接通过外部调用(通过路由)调用。允许的操作包括Action / RenderAction扩展方法。
NonAction - 就像标记一个方法“私有”一样,以防止外部呼叫或子动作无法访问它。适合保护您不需要/想要作为直接视图创建的操作。值得一提的是,这只是公共方法所必需的(因为私人/受保护不被认为是“可操作的”)。
另见:
答案 1 :(得分:2)
操作方法是控制器中的公共方法,可以使用URL调用。因此,默认情况下,如果控制器中有任何公共方法,则可以使用URL请求调用它。 要限制对控制器中公共方法的访问,可以使用NonAction属性。
子动作方法与NonAction方法不同,因为无法使用 Action()或 RenderAction()帮助程序调用NonAction方法。
子操作方法不会响应URL请求。如果尝试,将抛出运行时错误 - 只有子请求才能访问子操作。
可以通过使用 Action()和 RenderAction() Html帮助程序从视图发出子请求来调用子操作方法。
操作方法不需要将[ChildActionOnly]属性用作子操作,但是如果要阻止因用户请求而调用操作方法,请使用此属性。< / p>
儿童行为通常与部分观点相关联,但这不是强制性的。
使用子操作方法,可以缓存视图的某些部分。这是儿童行动方法的主要优势。