ASP.NET MVC中的视图生成实例分析(2)

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")

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjzzwj.html