什么是MVC子操作?

58

我读了一本MVC基础书中关于child actions的内容,但我并不知道它是什么?

有人可以解释一下这些方法吗?

3个回答

97

Phil Haack在这篇博客文章中很好地解释了它。基本上,一个child action是一个控制器动作,你可以使用Html.Action助手从视图中调用:

@Html.Action("SomeActionName", "SomeController")

这个操作会在视图中指定的位置执行并渲染其输出。与Partial不同的是,Partial仅包含指定的标记,没有其他操作执行主要操作。

因此,您基本上有一个接收请求并呈现视图的主操作,但从此视图中,您可以呈现多个子操作,这些子操作将经过它们独立的MVC生命周期并最终呈现输出。而所有这一切都将在单个HTTP请求的上下文中发生。

子操作非常适用于创建整个可重用的小部件,这些小部件可以嵌入到您的视图中,并通过它们独立的MVC生命周期。


可以从视图中调用非子操作吗? - Shahrooz Jafari
10
实际上,当你调用Html.Partial方法时,该动作自动成为子动作。如果你在动作上使用了[ChildActionOnly]属性修饰,那么它只能被用作子动作,无法直接访问。 - Darin Dimitrov
我认为一个区别是Action方法可以从任何视图中调用,对吗? - Shahrooz Jafari
2
是的,但只能从视图中实现。您还可以在浏览器地址栏中输入URL,这将调用标准控制器操作。 - Darin Dimitrov
1
@DarinDimitrov 这就是我一直在寻找的答案!普通的“action”和“child action”之间没有真正的区别。我一开始认为这个属性是必需的,但似乎更多是一个安全功能,以便只用于渲染部分的操作无法从浏览器直接公开访问。 - ProxyTech

7

子操作是通过在视图内使用html.renderaction或html.action助手调用的操作。


2

子操作是通过@Html.Action()在视图中调用的动作方法。

示例 我在控制器上有一个操作。

public DateTime Time(DateTime time)
{
    return time;
}

要从 View 调用此操作,我将使用以下代码:

@Html.Action("Time", new { time = DateTime.Now }) 

不充分的示例,没有解释:子操作需要重用一些演示逻辑,在所提供的示例中最好通过显示模板来实现。 - timmi4sa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接