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

gre*_*man 9 asp.net-mvc-3

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

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

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

行动方式:

public PartialViewResult Test()
{
  return PartialView(DateTime.Now);
}
Run Code Online (Sandbox Code Playgroud)

(部分)查看:

@model DateTime?

<p>@(Model ?? DateTime.MinValue)</p>
Run Code Online (Sandbox Code Playgroud)

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

mfa*_*nto 23

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

Html.Partial("PartialName", Model.PartialData);
Run Code Online (Sandbox Code Playgroud)

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

Html.Action("Test")
Run Code Online (Sandbox Code Playgroud)

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

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