我正在使用ASP.NET MVC 3.0并在* _Shared \ Layout.cshtml *
中收到以下错误执行处理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错。
我在@{ Html.RenderAction("Menu", "Nav"); }
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>
<body>
<div id = "header">
<div class = "title">SPORTS STORE</div>
</div>
<div id = "categories">
@{ Html.RenderAction("Menu", "Nav"); }
</div>
<div id = "content">
@RenderBody()
</div>
</body>
</html>
在Controllers \ NavController中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SportsStore.Domain.Abstract;
using SportsStore.WebUI.Models;
namespace SportsStore.WebUI.Controllers
{
public class NavController : Controller
{
private IProductRepository repository;
public NavController(IProductRepository repo)
{
repository = repo;
}
public PartialViewResult Menu()
{
IEnumerable<string> categories = repository.Products
.Select(x => x.Category)
.Distinct()
.OrderBy(x => x);
return PartialView(categories);
}
}
}
在Views \ Nav \ Menu.cshtml中:
@model IEnumerable<string>
@
{
Layout = null;
}
@Html.ActionLink("Home", "List", "Product")
@foreach (var link in Model)
{
@Html.RouteLink(link, new
{
controller = "Product",
action = "List",
category = link,
page = 1
}
)
}
答案 0 :(得分:3)
我可以让这个例子起作用。
但是,发布的代码存在问题。请注意您的例子中的换行符:
@
{
Layout = null;
}
虽然它应该是
@{
Layout = null;
}
它会生成您引用的错误“错误执行处理程序的子请求'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'”,这是无益的,但是当我按下F5时,我被带到了一个更好描述的页面:< / p>
分析程序错误说明:解析a期间发生错误 服务此请求所需的资源。请查看以下内容 特定的解析错误详细信息并修改您的源文件 适当。
分析器错误消息:在之后遇到空格或换行符 “@”字符。只有有效的标识符,关键字,评论,“(和) “{”在代码块的开头有效,必须出现 紧跟在“@”之后,两者之间没有空格。
答案 1 :(得分:2)
使用Menu
操作中的[ChildActionOnly]
属性,如下所示:
[ChildActionOnly]
public PartialViewResult Menu()
{
IEnumerable<string> categories = repository.Products
.Select(x => x.Category)
.Distinct()
.OrderBy(x => x);
return PartialView(categories);
}