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

本文关键字:添加 动态 菜单项 MVC net 数据库 asp | 更新日期: 2023-09-27 17:49:38

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

我有业务,数据和服务组件在我的项目。我必须从这里开始声明菜单项。

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

我认为使用@Html.Action()来传递您的用户id(或在您的操作中读取它-例如从会话-取决于您存储此类信息的位置)是最容易的。

有了这种方法,你有一个文件,你把你的HTML和JS,很容易从任何地方传递一个模型给它(因为你只是渲染你的动作,你不需要附加任何特定的其他模型或ViewBag/ViewData

可能的功能如下:

@Html.Action("Render", "Menu")

你行动

[ChildActionOnly]
public PartialViewResult Render() {
var userId = Session["some_key"];
var model = _userMenuService.GetModelForUserId(userId);
return PartialView(model);
}

你应该明白这一点:)

编辑:

要将数据映射到视图,您必须提供一些视图模型,它可以在构造函数中接受一些IEnumerable<MenuItem>集合,这将反映到特定的视图模型属性,或者您可以将所有菜单项的集合传递给视图并使用它们作为您的模型。