从ASP.NET MVC中的布局调用操作方法

Uğu*_*maz 5 .net c# asp.net-mvc partial-views asp.net-mvc-4

我有一个布局和一个局部视图,它们在共享文件夹中.部分视图显示非静态的顶级菜单项.所以我需要调用一个action方法来从数据库中获取菜单项.为此,我创建了一个控制器并在其中添加了一个动作方法.

当我尝试在Web浏览器中浏览页面时,发生此错误:

未找到路径'/'的控制器或未实现IController.

注意: 我也尝试了Html.RenderAction,Html.Partial方法......我尝试创建另一个视图文件夹,并创建一个新的局部视图和以"文件夹名称+控制器"后缀命名的新控制器.

布局:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    <div id="header">
        @Html.Action("~/Views/Shared/_TopMenu.cshtml", "LayoutController", new {area =""}); //Here is the problem.

    </div>
   <div>
        @RenderBody();
   </div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

_TopMenu.cshtml:

@model IList<string>

@foreach (string item in Model)
{
    <span>item</span>
}
Run Code Online (Sandbox Code Playgroud)

LayoutController(在Controllers文件夹中):

 public class LayoutController : Controller
    {
        //
        // GET: /Shared/
        public ActionResult Index()
        {
            return View();
        }

        [ChildActionOnly]
        [ActionName("_TopMenu")]
        public ActionResult TopMenu()
        {
           IList<string> menuModel = GetFromDb();
           return PartialView("_TopMenu", menuModel);
        }    
    }
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 5

如果你把它放在你的视野中会发生什么?

@{ Html.RenderAction("TopMenu", "Layout"); }
Run Code Online (Sandbox Code Playgroud)

(并注意这一切,直到一切正常:// [ChildActionOnly])