所以我希望从数据库中获取数据并将其添加到每个视图页面。所以将它添加到Views / Shared / _Layout.cshtml
如何在不将模型添加到每个控制器的视图中的情况下执行此操作?
我想从数据库动态添加菜单项到每个视图,我在_Layout.cshtml中有这个:
@foreach (var item in Model)
{
<li><a href="/Cms/@item.Url">@item.Title</a></li>
}
这在我的HomeController中:
return View(db.Menus.ToList());
但我不想在每个控制器动作中都这样做,我怎样才能使这更简单呢?
答案 0 :(得分:0)
使用RenderAction方法仅渲染您想要的部分。
我强烈建议您查看MVC Music Store项目 - 它有很多最佳实践。确切问题的解决方案在于_Layout.cshtml文件,代码为:
@{Html.RenderAction("GenreMenu", "Store");}
答案 1 :(得分:0)
让我们假设您有一个模型,它代表您数据库中的菜单
class MenuItem()
{
public int Id { get; set; }
public string Name { get; set; }
//...
}
为了将其放入每个视图页面,您需要创建一个“BaseController”,其他所有控制器都从该基础继承。在此控制器中,您可以在构造函数中定义菜单。
public class BaseController : Controller
{
public BaseController()
{
//I don't know how you get your data
ViewBag.DatabaseMenu = repository.GetMenuItems();
}
}
从这一点开始,将: BaseController
添加到您的所有控制器中,您可以在所有页面上的ViewBag中使用DatabaseMenu
来构建菜单。
您在视图中如何执行此操作取决于您自己。您可以创建List<MenuItem>
类型的集合并说出List<MenuItem> Menu = ViewBag.DatabaseMenu;
并使用foreach迭代您的项目以创建菜单