我在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动作和儿童行为之间的区别,但这让我重新思考。你能解释为什么这不被控制者视为儿童行为吗?
答案 0 :(得分:1)
子操作是作为原始操作的一部分执行的操作。因此,您的浏览器会调用操作1,并且在Razor呈现视图期间,您的视图会调用@Html.Action()
来呈现子操作。子操作在执行之前执行,将操作1的结果发送回客户端。
在您的情况下,浏览器正在调用“预览”操作(@Url.Action()
)。这会导致第二个操作,而不是子操作,因为第一个操作的结果已返回到浏览器,现在您的浏览器正在调用新操作。就像用户点击<a>
链接导航到新页面一样。