Html.Partial和Html.Action方法有什么区别?

时间:2012-11-18 18:33:40

标签: asp.net-mvc-3

我有一个控制器,动作返回PartialViewResult并用它查看。为了测试我输出当前的DateTime(在行动中),并在视图中检查它是否为空,所以我知道我得到了什么。

当我尝试使用Html.Action将该视图“嵌入”另一个视图时,我会获得当前的日期时间,因此我的操作会被调用。

但是当我使用Html.Partial时,视图以null呈现,我的动作方法不会被调用。此外,两个断点和调试器也确认,在后一种情况下,我的动作方法不会被调用。

行动方法:

public PartialViewResult Test()
{
  return PartialView(DateTime.Now);
}

(部分)查看:

@model DateTime?

<p>@(Model ?? DateTime.MinValue)</p>

从主视图调用@Html.Action("Test")@Html.Partial("Test")

1 个答案:

答案 0 :(得分:23)

Html.Action()将调用您的操作方法,但Html.Partial()不会。 Html.Partial()只呈现您的局部视图,如果您有一些静态内容,或者您​​已经加载了视图数据,则它非常有用。

Html.Partial("PartialName", Model.PartialData);

将传递给您的模型数据的PartialName视图。这是将视图分解为干净部分的好方法,而不必向服务器发出任何其他请求。

Html.Action("Test")

将调用您的Test操作,并呈现结果。

这就是你看到NULL DateTime的原因。 Html.Action()实际上是调用动作,计算DateTime和渲染视图,而Html.Partial()只是渲染视图。