为什么Url.Action不被识别为Child Action

时间:2013-08-30 19:09:03

标签: asp.net-mvc razor

我在MVC中使用以下代码在数据库中显示图像

<img alt="@Html.Raw(m.Title)" src="@Url.Action("Preview", "Pictures", new { id = m.Id} )"/>

使用子操作将图像视图从控制器返回到主视图。

<div>
    @Html.Action("Gallery", "Pictures")
</div>

[ChildActionOnly]
    public ActionResult Gallery()
    {...}

出于好奇,我试图检查@Url.Action是否作为子操作执行,但发现它不是作为子操作执行的。我以为我知道MVC动作和儿童行为之间的区别,但这让我重新思考。你能解释为什么这不被控制者视为儿童行为吗?

1 个答案:

答案 0 :(得分:1)

子操作是作为原始操作的一部分执行的操作。因此,您的浏览器会调用操作1,并且在Razor呈现视图期间,您的视图会调用@Html.Action()来呈现子操作。子操作在执行之前执行,将操作1的结果发送回客户端。

在您的情况下,浏览器正在调用“预览”操作(@Url.Action())。这会导致第二个操作,而不是子操作,因为第一个操作的结果已返回到浏览器,现在您的浏览器正在调用新操作。就像用户点击<a>链接导航到新页面一样。