【问题标题】:Add dynamic menu item in asp.net MVC using the database使用数据库在asp.net MVC中添加动态菜单项
【发布时间】:2015-05-19 10:36:46
【问题描述】:

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

                }
            }

我的项目中有业务、数据和服务组件。我必须从那里开始声明菜单项。提前致谢。

【问题讨论】:

  • 我看不到您根据用户 ID 在哪里选择菜单。
  • 我错过了。我通过 javascript 中的会话传递它并在控制器中接收它。我的疑问是我将如何从数据库接收菜单到视图页面?

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


【解决方案1】:

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

使用这种方法,您有一个放置 HTML 和 JS 的文件,很容易从任何地方将模型传递给它(因为您只需渲染您的动作,您不必附加任何特定于其他模型或 @ 987654322@.

可能的功能如下:

大师

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

你的行动

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

你应该明白了:)

编辑:

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

【讨论】:

  • 正如你提到的,我会将用户 ID 作为会话值传递。如何将数据存储库中的菜单值返回到视图页面?
  • 您必须将数据映射到某个视图模型,我编辑了答案以反映这一点。
  • 每次刷新 Master(Layout.cshtml) 时都会加载菜单。如何使该菜单仅加载一次?
猜你喜欢
  • 2016-04-29
  • 2011-08-09
  • 1970-01-01
  • 2011-11-18
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多