Я читал некоторые похожие темы здесь и в Интернете, но я не думаю, что видел один, который бы классифицировал это как дубликат, поэтому я собираюсь пойти и опубликовать его. Я в настоящее время загрузка моего динамическое меню из базы данных следующим образом:Динамические меню из базы данных в 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()
в моем классе контроллера, так что я не в состоянии (к моему знанию), чтобы использовать синтаксис Razor. Я предпочел бы вместо этого загружать меню из представления, так что я могу использовать @Html.ActionLink(linkText, actionName, controllerName)
. Загружая HTML, как я это делаю, он будет генерировать другой текст ссылки в зависимости от текущего контроллера, поэтому ссылки не всегда отображаются правильно. Можно ли получить доступ к базе данных из представления? Или, возможно, просто передать содержимое из базы данных с контроллера в представление и затем отобразить меню таким образом?
Если вы хотите использовать бритву, создайте PartialView и сделать LoadMenus результатом действия и «вернуть PartialView (« _ Menu », меню);' в вашем Partial View вы можете прокручивать свой «@model IEnumerable
А, я думаю, что бит '@ model', возможно, был тем, что я ищу. Я мог использовать частичное представление для меню, но до сих пор не знал, как получить доступ к информации из представления. –
Я также смог сгенерировать ссылки и указать контроллер с помощью 'Url.Action()' like so: '$ '{menu.MenuName}
" ' –