使用数据库在asp.net MVC中添加动态菜单项

时间:2015-05-19 10:36:46

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4

我想根据用户登录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>
                    }

                }
            }

我的项目中有业务,数据和服务组件。我从哪里开始申报菜单项。提前谢谢。

1 个答案:

答案 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); } 集合,这些集合将反映到特定的视图模型属性,或者您可以将所有菜单项的集合传递给查看并将它们用作您的模型。