ASP.NET MVC 2.0 Html.RenderPartial & Html.RenderAction

ASP.NET MVC 2.0 Html.RenderPartial & Html.RenderAction


之前在MVC1.0的时候,提供了Html.RenderPartial的方法,让我们可以将共同的网页元素设计成“组件”

的方式使用;不过在产生Model的时候,必须把所有的数据都先准备好,然后提供给Html.RenderPartial。

例如:一般都会先准备一个ViewModel,提供给View使用。从Controller那边接收产生的DinnerFormViewModel

之后,把Model的数据传递给名为“DinnerForm”的Partial。


<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Views/Shared/Site.Master"  %>


    Host a Dinner




    

Host a Dinner

<% Html.RenderPartial("DinnerForm"); %>

而在MVC 2.0中,额外提供了Html.RenderAction的方法;这个方法和Partial有点不太一样,他是直接重新执

行一次Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传。

所以Html.RenderAction中传递的参数是执行的Controller和Action名称。


ASP.NET MVC MUSIC STORE

  • Home
  • Store
  • <% Html.RenderAction("CartSummary", "ShoppingCart"); %>
  • Admin

若是想让建立的Action只能让RenderAction调用,可以加上ChildActionOnly属性,让他无法被直接调用。


//
// GET: /Store/GenreMenu

[ChildActionOnly]
public ActionResult GenreMenu()
{
    var genres = storeDB.Genres.ToList();

    return View(genres);
}

以下是执行的比较图:

image

image