MVCの原則に違反しないASP.NET MVCのデータベース駆動メニューを処理する方法を探しています。私は、ハードコードされたデフォルトの "Home、About"メニューを自分のデータベースから何かに置き換えたいと思います。どのように私はこれを配線しますか?私は自分のSite.MasterにContentPlaceHolderを設定して、自分のビューに再生成しましたか?それは私にとって正しいとは思わない。ASP.NET MVCのデータベース駆動メニューを結ぶのに最適な方法
3
A
答えて
2
私のメインメニューは、私のMasterPageで部分的に表示されるViewUserControlです。私はハードコードされていますが、ViewDataから簡単に生成できます。ビューデータから生成するには、各コントローラ/アクションに適用されるメニューを生成する際に使用するパラメータを指定したカスタムFilterAttributeを実装するか、メニューが各ページで同じ場合は、 OnActionExecutedをオーバーライドし、その中のViewDataに追加することによって、ビューデータに追加します。
例(たぶん、データベースから取得するのではなく、結果のキャッシュを使用することに注意してください)。
モデルクラス
public class MenuItem
{
public string Text { get; set; }
public string Action { get; set; }
public string Controller { get; set; }
}
public class Menu
{
public string Heading { get; set; }
public IEnumerable<MenuItem> Items { get; set; }
}
MenuControl.ascx:タイプSystem.Web.Mvc.ViewPage<List<Menu>>
<div id="mainMenu">
<% foreach (var menu in Model) { %>
<div class="menu">
<h2 class="menu-heading"><%= menu.Heading %></h2>
<% foreach (var item in Model.Items) { %>
<%= Html.ActionLink(item.Text,
item.Action,
item.Controller,
null,
{ @class = "menu-item" }) %>
<% } %>
</div>
<% } %>
</div>
のマスターページ
<html>
<head>
...
<asp:ContentPlaceHolder runat="server" id="HeaderContent">
</head>
<body>
... other HTML...
<% Html.RenderPartial("MenuControl", ViewData["mainMenu"], ViewData); %>
<asp:ContentPlaceHolder runat="server" id="BodyContent" />
... more HTML ...
</body>
</html>
BaseController
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext != null)
{
var context = filterContext.Result as ViewResult;
if (context != null) {
context.ViewData["mainMenu"] =
db.MenuData.Where(m => m.Type == "mainMenu")
.Select(m => new Menu {
Heading = m.Heading,
Items = db.ItemData.Where(i => i.MenuID == m.MenuID)
.OrderBy(i => i.Name)
.Select(i => new MenuItem {
Text = i.Text,
Action = i.Operation,
Controller = i.Table
})
});
}
}
}
関連する問題
- 1. ASP.NET MVC - データベース駆動メニュー
- 2. エキスパートレベルのASP.NET MVCを学ぶのに最適なロードマップ
- 3. アニメーションを駆動する最適な方法は何ですか?
- 4. MVC、Linq、Entity Frameworkを学ぶのに最適なリソース
- 5. データベース駆動型のWebサイトに最適なCMSはどれですか?
- 6. ASP.NET MVCでのデータ駆動型検証
- 7. データベース駆動型ログインシステムの作成方法
- 8. データベースにぶつかることなく、asp.net MVCベースコントローラをテストする方法は?
- 9. 特定のハッシュタグでつぶやくのに最適な方法
- 10. ASP.NET MVCを学ぶ
- 11. 最良の方法は、JMS宛先にMDBを結ぶこと
- 12. Asp.net mvc 3データベースの使用方法
- 13. asp.net mvcでhtmlをレンダリングするのに最適な場所
- 14. ASP.NET MVCでグローバルオブジェクトを作成するのに最適な場所
- 15. データベース駆動型のiOSアプリ
- 16. キー値ストアとデータベースのデータを最適に結合する方法
- 17. ソフトウェア最適化を学ぶ最も良い方法
- 18. asp.net mvcコードのプロファイルに最適なツールは何ですか?
- 19. ASP.NET MVC - 異なるロールのメニュー
- 20. データベース駆動メニューのWebサイト(CMS)の検討と提案のためのデータベースデザイン
- 21. Cでメニュー駆動型CLIのユーザー入力を取得する最善の方法
- 22. データ駆動型アプリケーションに最適なJava EEテクノロジのスタックはどれですか?
- 23. ASP.NET MVCマスターページのメニューにデータを提供
- 24. ASP.NET MVC - さまざまな方法で対応できるフォームアクションを最適に構築する方法
- 25. asp.net mvcの画像をdbにアップロードするには、どのような方法が最適ですか?
- 26. Asp.netメニュー、カスタマイズ方法
- 27. Asp.net MVC 2のコレクション項目にバリデーションを適用する方法
- 28. データベース駆動型のWebサイトを作成するこの "ルビーの方法"は、最初にモデルですか?
- 29. Umbraco 5でデータベース駆動型Webページを構築する方法
- 30. ASP.netアプリケーションのメニューを作成する適切な方法は何ですか?
この方法に関連するリンクや記事はありますか? –
私はGoogleを見回し、RTMに関連するものは何も見つかりませんでした。そのほとんどは、リリースされたバージョンには実際には適用されない古いものでした。私は例を加えることができるかどうかを見ていきます。 – tvanfosson
まあ、私はそれほどMVCについてはわかりませんが、この演技者ですか?これは、各ページリクエストのメニューを取得するためにサブクエリを使用してデータベースに移動しますか? – flipdoubt