Asp.net mvc 4 数据库中的动态菜单
我有一个Asp.net mvc 4 数据库中的动态菜单,asp.net-mvc-4,Asp.net Mvc 4,我有一个登录页面,用户登录时会进入主页,其中加载了动态菜单。问题是,当用户单击其中一个菜单链接时,加载的菜单不可见 这是因为我在主控制器的索引操作中编写了代码 因此,我的问题是,我应该在哪里编写动态菜单的逻辑,以便单击菜单链接即可访问它 \u Layout.cshtml文件,其中加载了菜单 @model SMS.Models.ViewModel.DashboardVM @if (Model != null && Model.MenuParentList.Count >
登录页面
,用户登录时会进入主页
,其中加载了动态菜单
。问题是,当用户单击其中一个菜单链接
时,加载的菜单
不可见
这是因为我在主控制器
的索引操作
中编写了代码
因此,我的问题是,我应该在哪里编写动态菜单的逻辑
,以便单击菜单链接即可访问它
\u Layout.cshtml文件,其中加载了菜单
@model SMS.Models.ViewModel.DashboardVM
@if (Model != null && Model.MenuParentList.Count > 0)
{
<!-- Sidebar Menu -->
<ul class="sidebar-menu">
<li class="header">MAIN NAVIGATION</li>
<li class="active">
<a href="#">
<i class="fa fa-dashboard"></i> <span>Dashboard</span>
</a>
</li>
@foreach (var parentItem in Model.MenuParentList)
{
<li class="treeview">
<a href="#">
<i class="fa fa-th"></i>
<span>@parentItem.MenuParentName</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
@Html.Partial("_MenuParent", Model.MenuList.Where(x => x.ParentID == parentItem.MenuParentID))
</ul>
</li>
}
</ul>
}
创建一个单独的
[ChildActionOnly]
方法,生成菜单,并从布局页面调用它,使其在所有页面中都可用
[ChildActionOnly]
public ActionResult Menu()
{
var model = new DashboardVM
{
....
}
return PartialView("_Menu", model);
}
并创建\u Menu.cshtml
局部视图以生成html
@model DashboardVM
....
然后在布局中,删除@model SMS.Models.ViewModel.DashboardVM
(布局不应该有模型,除非该模型是布局使用的所有模型的基类),然后包括
@Html.Action("Menu", yourControllerName)
它将调用
菜单
方法,并将返回的部分视图插入布局。感谢mate的大力支持。.我从另一个堆栈溢出问题
中了解了有关ChildAction
的更多信息。感谢堆栈溢出
对我这样的新手的帮助。:)@ksg,没办法。但依我看,这是一个糟糕的解决方案。如果您必须使用会话,那么您应该始终在服务器上检查会话值是否存在,如果不存在,请再次从数据库中获取它。我同意您的观点,但是在会话得到timedout之前扩展会话有什么问题呢。最后,它为用户提供了一个良好的体验,而不必在每次会话到期时都进入登录页面……进入登录页面是什么意思。您不应将会话用于登录/身份验证信息。这应该在表单验证cookie中。请查看
@Html.Action("Menu", yourControllerName)