ASP.NET MVC 3.0 - 执行处理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错

时间:2012-03-08 19:04:54

标签: asp.net-mvc

我正在使用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
        }
    )
}   

2 个答案:

答案 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);
}