我在这里和网上阅读了一些类似的主题,但我认为我没有看到将其归类为重复的主题,所以我将继续发布它。我目前正在从数据库中加载我的动态菜单,如下所示:
public void LoadMenus()
{
var dbContext = new ContentClassesDataContext();
var menus = from m in dbContext.Menus
where m.MenuName != "Home" && m.MenuGroup == "RazorHome" && m.RoleID == "Facility"
orderby m.Sequence, m.MenuName
select m;
var html = "";
if (menus.Any())
{
html += "<span/>";
foreach (var menu in menus)
{
html = html + $"<a href='{menu.URL}'>{menu.MenuName}</a><br/>";
}
html += "<hr>";
}
Session["Menus"] = html;
}
LoadMenus()
在我的 Controller 类中,所以我无法(据我所知)使用 Razor 语法。我宁愿从 View 加载菜单,这样我就可以使用 @Html.ActionLink(linkText, actionName, controllerName)
。以我当前的方式加载 HTML 会根据当前 Controller 生成不同的链接文本,因此链接并不总是正确呈现。是否可以从 View 访问数据库?或者只是将数据库中的内容从 Controller 传递到 View ,然后以这种方式呈现菜单?
最佳答案
您应该将 html 保留在 cshtml View 中。
您应该通过 View 模型而不是通过 session 传递数据。
1)
在 Controller 中,获取菜单数据(在这个例子中我们获取了一些假数据)。
创建一个可以保存菜单数据并将其传递给 View 的 View 模型,如下所示:
public class HomeController : Controller
{
public ActionResult Index()
{
var menu = GetMenu();
var vm = new ViewModel() {Menu = menu};
return View(vm);
}
private Menu GetMenu()
{
var menu = new Menu();
var menuItems = new List<MenuItem>();
menuItems.Add(new MenuItem() { LinkText = "Home" , ActionName = "Index", ControllerName = "Home"});
menuItems.Add(new MenuItem() { LinkText = "About", ActionName = "About", ControllerName = "Home" });
menuItems.Add(new MenuItem() { LinkText = "Help", ActionName = "Help", ControllerName = "Home" });
menu.Items = menuItems;
return menu;
}
}
2)
这是 View 模型
public class ViewModel
{
public Menu Menu { get; set; }
}
此 View 是如何将菜单数据呈现为 html 菜单的示例
@model WebApplication1.Models.ViewModel
<ul id="menu">
@foreach (var item in @Model.Menu.Items)
{
<li>@Html.ActionLink(@item.LinkText, @item.ActionName,
@item.ControllerName)</li>
}
</ul>
3)
这是使用的示例菜单类(代表来自 dbcontext 的实体)
public class Menu
{
public List<MenuItem> Items { get; set; }
}
public class MenuItem
{
public string LinkText { get; set; }
public string ActionName { get; set; }
public string ControllerName { get; set; }
}
这里有一些帮助您入门的链接:
http://www.codeproject.com/Articles/585873/Basic-Understanding-On-ASP-NET-MVC http://www.asp.net/mvc/overview/getting-started/introduction/getting-started
关于asp.net-mvc - MVC 中来自数据库的动态菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928786/