ASP.NET MVC 3在页面布局管窥(ASP.NET MVC 3 Partial View in

2019-06-26 06:39发布

我正在建立一个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(动作,控制器)方法的局部视图。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <p>
        @{Html.RenderAction("Index","Layout");}
    </p>

    @RenderBody()
</body>
</html>

当布局页面执行@ {Html.RenderAction(“索引”,“布局”);}线,它引发出一个错误消息“执行用于处理程序‘System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper’子请求错误”。

我缺少朋友? 我怎样才能调用布局页面的局部视图?

谢谢大家!

Answer 1:

代替:

public ActionResult Index()
{
    return View(layout);
}

做:

public ActionResult Index()
{
    return PartialView(layout);
}

如果你不这样做,当你从你的孩子动作返回一个普通视图,这个普通视图试图包含布局,这反过来又企图使孩子的行动,这反过来又返回一个视图,又包括布局,这反过来又企图使孩子动作,...我们结束了,如一个由这同一个部位移植的名字。

另外,在你的部分,你不需要做双重编码。 该@剃刀功能已经做HTML编码:

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

    @foreach (var item in Model.navHeader)
    {
        @item.Name 
        @item.URL
    }
</p>


Answer 2:

首先确认你的孩子的看法是内部Shared目录

@Html.Partial("_LayoutPartial")

要么

 @{Html.RenderAction("actionname", "controller name");}

不要使用@Html.Encode()剃刀已经做妳。 只要使用

@item.Name 
@item.URL


Answer 3:

我已经解决了这个错误让布局页

System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper

重要! 首先,创建共享文件夹内部的局部视图

在控制器,

public PartialViewResult Userdetails()
{
   ....
   return PartialView("PartialViewName", obj);  
}

在布局页面,

@{Html.RenderAction("action","controller");}


Answer 4:

我知道这是一个老问题,但我想我会在这里抛出此。 您可以使用Html.ActionHtml.RenderAction 。 他们在技术上做同样的事情,但是这取决于你有多少内容返回回能有哪一个你应该使用最好的效率产生影响。

这两种方法都允许您调用到从视图和输出视图中动作到位的结果的操作方法。 两者之间的区别是, Html.RenderAction将直接渲染结果提供给响应(这是更有效的,如果所述动作返回大量HTML的),而Html.Action返回其结果的字符串。

资源



文章来源: ASP.NET MVC 3 Partial View in layout page