Html.RenderPartial("ProductSummary", p);
这里的第二个参数,将会在分部视图中当在模型对象来使用。
需要注意的是 RenderPartial 方法的返回类型是 void,它会将输出的内容直接输出到回应的输出流中。所以在使用上面语句的时候,不能直接嵌入到页面中,需要放在一个 @ { } 语句中,如下所示。
复制代码 代码如下:
@{
Html.RenderPartial("ProductSummary", p);
}
如果你不喜欢这样的语法,而希望直接嵌入到页面中,也可以使用 Html.Partial 方法来呈现,区别是这个方法返回呈现的 Html 片段,而不是直接输出到输出流中。
复制代码 代码如下:
@Html.Partial("ProductSummary", p)
子 Action 问题
由于分布视图没有处理能力,只能继承主页面的数据进行呈现,如果需要有处理能力,怎么办呢?在 WebForm 中,我们可以使用 Server.Execute 来嵌入其它处理程序的输出内容,在 MVC 中,我们使用子 Action 来处理。
子 Action 就是用户不能直接访问,只能在其他的 Action 中访问的 Action 方法,它与普通的 Action 一样,有 Action 方法,还有这个 Action 对应的视图。
我们使用特性 ChildActionOnly 来说明这是一个子 Action。
复制代码 代码如下:
[ChildActionOnly]
public string Menu()
{
return "Hello, from NavController";
}
如果用户直接请求这个子 Action ,那么,系统会返回一个错误信息。
操作“menu”只能由子请求访问。
在其它视图中,可以使用 RenderAction 来访问子 Action,类似于 RenderPartial 方法,这个方法直接将内容输出到输出流中,由于它们的返回类型都是 void ,所以需要使用 @{} 来使用。
复制代码 代码如下:
@{ Html.RenderAction("Menu", "Nav"); }
同样,使用 Action 则可以直接返回一个 Html 片段,就不用使用一个 @{ } 了。
复制代码 代码如下:
<!-- Action -->
@Html.Action("Menu", "Nav")