这篇文章对我有用——下面我正在详细写——在共享目录中,您将在您的 Web 应用程序中使用的所有文件(如母版页和部分视图)放在共享目录中,希望它们的使用次数超过一次(对于部分视图)。没有共享控制器,但您可以创建一个 CommonController 来处理菜单等内容。
我不知道您需要在视图中显示哪些其他数据,但看看您的示例,您似乎想在 ul 标记中显示菜单项。
我会有一个代表菜单项的类,例如:
public class MenuItem
{
public int MenuId { get; set; }
public string MenuName { get; set; }
}
我总是为每个视图创建一个视图模型。这更好,因为这样您就只有视图上所需的字段。永远不要将您的域对象直接发送到视图。
视图模型看起来像这样,它可以包含许多其他属性,但对于这个演示,我将只包含 meu 项。
public class MyViewModel
{
// This will contain the menu items that you want displayd in your view
public IEnumerable<MenuItem> MenuItems { get; set; }
}
您的操作方法(在称为 CommonController 之类的控制器中):
public ActionResult MyActionMethod
{
MyViewModel viewModel = new MyViewModel
{
// Here you do a database call to populate your menu items
// This GetAllMenuItems method returns a list of MenuItem objects
MenuItems = menuItemService.GetAllMenuItems()
};
return View(viewModel);
}
创建一个从 CommonController 获取数据的局部视图(您需要使用上面的操作方法创建它)。循环遍历 MenuItems 中的每个 MenuItem,并在 li 标签中显示名称。
<ul>
@foreach (var item in Model.MenuItems)
{
<li>item.MenuName</li>
}
</ul>
我希望这有帮助。剩下的事情我留给你做,然后阅读更多文章。互联网上有很多信息描述了您想要做什么。您只需要花时间阅读这些文章。
这是在 MVC 中实现 asp.net 母版页功能的非常有用的文章。即,如果我们想要一个对每个页面都通用的功能[MVC 中的每个控制器/视图] 都需要遵循本文的步骤。我遇到了一次本文未提及的问题,将在下面分享 - 当我们将创建部分视图时,该部分视图将在 _layout 页面上调用以在每个视图中共享.. 我们必须写 - @{Html.RenderAction("BindMenu ", "Common");} 在 _Layout 页面上。因为我是新手,所以我试图调用部分视图,例如 - @Html.Partial("~/Views/Shared/_HeaderMenuPartial.cshtml", Model.MenuItemsList) 这不起作用。