こことWeb上で似たような話題を読んでいますが、これを複製として分類するとは思わなかったので、先に進んで投稿します。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をロードすると、現在のコントローラに応じて異なるリンクテキストが生成されるため、リンクが常に正しくレンダリングされるとは限りません。ビューからデータベースにアクセスできますか?あるいは、コントローラからビューへのデータベースのコンテンツを渡して、そのようにメニューをレンダリングするだけですか?
剃刀を使用する場合は、 PartialViewを実行し、LoadMenusをアクション結果にし、 'PartialView(" _ Menu "、menus);をパーシャルビューで' @model IEnumerable
ああ、私は' @ model'ビットが私が探していたかもしれないと思います。メニューの部分ビューを使用することはできましたが、ビュー内から情報にアクセスする方法はまだ分かりませんでした。 –
私はリンクを生成し、 'Url.Action()'を使ってコントローラを指定することもできました: '$" {menu.MenuName}
" –