Html.Action 與 Html.RenderAction 執行獨立 Controller Action 並呈現結果,提供更高靈活性與重用性。兩者差異:RenderAction 直接寫入回應串流 (void 回傳),Action 回傳 HTML 字串 (可直接內嵌)。
public class MyController {
public ActionResult Index() { return View(); }
[ChildActionOnly]
public ActionResult Menu() {
var menu = GetMenuFromSomewhere();
return PartialView(menu);
}
}
View Menu.cshtml:
@model Menu
<ul> @foreach(var item in Model.MenuItem) { <li>@item</li> } </ul>
於 Index.cshtml 呼叫:
@Html.Action("Menu") 或 @{ Html.RenderAction("Menu"); }
[ChildActionOnly] 屬性防止直接 URL 存取。MVC 3 新增 ControllerContext.IsChildAction 屬性供程式碼判斷。
適合導航選單、側邊欄、購物車摘要等跨頁面共用且需獨立資料邏輯的區塊。