Asp.net

佈局頁面中的 ASP.NET MVC 3 部分視圖

  • November 22, 2016

我正在為 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>

引用自:https://stackoverflow.com/questions/11459390