我想根据用户登录ID动态绑定母版页中的菜单项列表。我是MVC模式的新手,通过引用很多网站让我更加困惑。如果你指导我创建动态菜单,对我有帮助。以下是我尽我所能的代码,
<script type="text/javascript">
$(document).ready(function () {
$("#accordian h3").click(function () {
$("#accordian ul ul").slideUp();
if (!$(this).next().is(":visible")) {
$(this).next().slideDown();
}
});
});
</script>
<nav class="navbar-default navbar-static-side" role="navigation">
<div id="accordian">
<ul class="nav" id="side-menu">
<li class ="nav-header">
@{
foreach (var MenuItem in Model.MainMenuModel)
{
var SubMenuItem = Model.SubMenuModel.Where(m => m.MainMenuID == MenuItem.ID);
<h3><a href="@MenuItem.MainMenuURL"> @MenuItem.MainMenuItem </a></h3>
if (SubMenuItem.Count() > 0)
{
<ul>
@foreach (var SubItem in SubMenuItem)
{
<li><a href='@SubItem.SubMenuURL'>@SubItem.SubMenuItem</a></li>
}
</ul>
}
}
}
我的项目中有业务,数据和服务组件。我从哪里开始申报菜单项。提前谢谢。
答案 0 :(得分:1)
我认为最简单的方法是使用@Html.Action()
呈现您的菜单传递您的用户ID(或在您的操作中读取它 - 例如从会话中读取 - 取决于您存储此类信息的位置)。
使用这种方法,您可以在一个文件中放置HTML和JS,从任何地方都可以轻松地将模型传递给它(因为您只需渲染您的操作,您不必附加任何特定于其他模型的内容或{ {1}}。
可能的功能可能如下:
主强>
ViewBag/ViewData
您的行动
@Html.Action("Render", "Menu")
你应该明白这一点:)
编辑:
要将数据映射到视图,您必须提供一些视图模型,它可以接受构造函数中的一些[ChildActionOnly]
public PartialViewResult Render() {
var userId = Session["some_key"];
var model = _userMenuService.GetModelForUserId(userId);
return PartialView(model);
}
集合,这些集合将反映到特定的视图模型属性,或者您可以将所有菜单项的集合传递给查看并将它们用作您的模型。