我已經在這裏和網上閱讀了一些類似的主題,但我認爲我沒有看到過將這個分類爲重複的主題,所以我將繼續併發布它。我目前我的加載動態菜單從數據庫中,像這樣:MVC中數據庫的動態菜單
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()
是我的控制器類,所以我不能(據我所知)使用剃刀語法。我寧願從視圖中加載菜單,以便我可以使用@Html.ActionLink(linkText, actionName, controllerName)
。按照我目前的做法加載HTML將根據當前控制器生成不同的鏈接文本,因此鏈接並不總是正確呈現。是否可以從視圖訪問數據庫?或者也許只是將數據庫中的內容從控制器傳遞到視圖,然後以這種方式呈現菜單?
如果你想使用Razor,創建一個PartialView並使LoadMenus成爲一個動作結果並返回PartialView(「_ Menu」,菜單);'在你的部分視圖中,你可以通過你的'@model IEnumerable
啊,我認爲'@ model'位可能是我正在尋找的。我能夠使用菜單的局部視圖,但仍不確定如何從視圖中訪問信息。 –
我也能夠通過使用'Url.Action()'來生成鏈接和指定控制器,如下所示:'$「{menu.MenuName}
」' –