Asp.net
佈局頁面中的 ASP.NET MVC 3 部分視圖
我正在為 asp.net MVC 佈局頁面設置共享內容(導航)。
這是我的部分視圖“_LayoutPartial.cshtml”,其中包含從模型中提取導航數據的程式碼。
@model MyApp.Models.ViewModel.LayoutViewModel <p> @foreach (var item in Model.navHeader) { //Test dump of navigation data @Html.Encode(item.Name); @Html.Encode(item.URL); } </p>這是我的控制器“LayoutController.cs”的程式碼的樣子。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MyApp.Models.ViewModel; namespace MyApp.Controllers { public class LayoutController : Controller { // // GET: /Layout/ LayoutViewModel layout = new LayoutViewModel(); public ActionResult Index() { return View(layout); } } }這是“_Layout.cshtml”頁面的程式碼。我正在嘗試使用 Html.RenderAction(Action,Controller) 方法在這裡呼叫局部視圖。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <p> @{Html.RenderAction("Index","Layout");} </p> @RenderBody() </body> </html>當佈局頁面執行@{Html.RenderAction(“Index”,“Layout”);} 行時,它會拋出錯誤消息“Error execution child request for handler ‘System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper’”。
我缺少什麼朋友?如何在佈局頁面中呼叫局部視圖?
謝謝大家!
代替:
public ActionResult Index() { return View(layout); }做:
public ActionResult Index() { return PartialView(layout); }如果您在從子操作返回普通視圖時不這樣做,則此普通視圖會嘗試包含 Layout,而後者又會嘗試呈現子操作,而子操作又會返回一個視圖,該視圖又包含 Layout ,這反過來又試圖呈現子動作,……我們最終得到的名字就像這個網站移植的名字一樣。
同樣在您的部分中,您不需要進行雙重編碼。@Razor 函式已經進行了 HTML 編碼:
@model MyApp.Models.ViewModel.LayoutViewModel <p> @foreach (var item in Model.navHeader) { @item.Name @item.URL } </p>