布局页面中的ASP.NET MVC 3部分视图

Fel*_*faw 11 asp.net partial-views asp.net-mvc-2

我正在为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>
Run Code Online (Sandbox Code Playgroud)

以下是我的控制器"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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

这是"_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>
Run Code Online (Sandbox Code Playgroud)

当布局页面执行@ {Html.RenderAction("索引","布局");}行时,它会抛出一条错误消息"错误执行处理程序的子请求'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'."

我想念的是什么朋友?如何在布局页面中调用局部视图?

谢谢大家!

Dar*_*rov 18

代替:

public ActionResult Index()
{
    return View(layout);
}
Run Code Online (Sandbox Code Playgroud)

做:

public ActionResult Index()
{
    return PartialView(layout);
}
Run Code Online (Sandbox Code Playgroud)

如果从子操作返回普通视图时不这样做,则此普通视图会尝试包含布局,布局会尝试渲染子操作,而子操作又返回视图,而视图又包含布局反过来试图渲染子动作,...我们最终得到的名称就像这个同一个网站所移植的名字一样.

在你的部分你也不需要做双重编码.@ Razor函数已经进行了HTML编码:

@model MyApp.Models.ViewModel.LayoutViewModel
<p>

    @foreach (var item in Model.navHeader)
    {
        @item.Name 
        @item.URL
    }
</p>
Run Code Online (Sandbox Code Playgroud)


Dot*_*mer 6

首先验证您的子视图是否在Shared目录中

@Html.Partial("_LayoutPartial")
Run Code Online (Sandbox Code Playgroud)

要么

 @{Html.RenderAction("actionname", "controller name");}
Run Code Online (Sandbox Code Playgroud)

并且不要使用@Html.Encode(),Razor已经为你做了.只是用

@item.Name 
@item.URL
Run Code Online (Sandbox Code Playgroud)