Ich suche nach einer Möglichkeit, ein datenbankgesteuertes Menü in ASP.NET MVC zu behandeln, das die MVC-Prinzipien nicht verletzt. Ich möchte das hartcodierte Standardmenü "Home, About" durch etwas aus meiner Datenbank ersetzen. Wie würde ich das anschließen? Würde ich einfach einen ContentPlaceHolder in meinem Site.Master einrichten und in meinen Views neu generiert? Das scheint mir nicht richtig zu sein.Die beste Methode, datenbankgesteuertes Menü in ASP.NET MVC zu verbinden
Antwort
Mein Hauptmenü ist ein ViewUserControl, das als Teilansicht in meiner MasterPage gerendert wird. Obwohl meins fest codiert ist, könnten Sie es einfach aus ViewData generieren. Aus Sichtdaten zu generieren, würde wahrscheinlich ein benutzerdefiniertes FilterAttribute implementieren, das die Parameter angibt, die beim Generieren des Menüs für jeden Controller/Aktion verwendet werden, oder, wenn das Menü auf jeder Seite dasselbe ist, einen Basiscontroller implementieren, der füllt in der Ansicht Daten durch Überschreiben OnActionExecuted und Hinzufügen zu den ViewData in ihm.
Beispiel (Hinweis, Sie würden wahrscheinlich Caching für die Ergebnisse verwenden, anstatt sie jedes Mal aus der db zu holen).
Modellklassen
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: vom Typ 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>
Master
<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>
Base
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 - Datenbankgesteuertes Menü
- 2. Die beste Methode zum Implementieren der Anforderungsbeschränkung in ASP.NET MVC?
- 3. ASP.NET MVC: Die beste Methode, gespeicherte Prozedur aufzurufen
- 4. Asp.Net MVC Bündelung, beste Methode, um fehlende Dateien zu finden
- 5. ASP.NET MVC Beste Implementierungspraktiken
- 6. ASP.NET MVC-Menü Ausgewähltes Element
- 7. Die beste Methode zum benutzerdefinierten Bearbeiten von Datensätzen in ASP.NET?
- 8. ASP.NET MVC erstellen Methode
- 9. Übergabe angularjs Array zu ASP.Net MVC-Methode
- 10. Beste ASP.NET-Anwendung Deployment Methode
- 11. Die beste Möglichkeit, System.Drawing.Image in ASP.NET MVC 3 anzuzeigen
- 12. Die beste Methode zum Testen von Einheiten ASP.NET MVC-Aktionsmethoden, die BindingHelperExtensions.UpdateFrom verwenden?
- 13. Die beste Methode zum Implementieren von DropDownList in ASP.NET MVC 2?
- 14. Fill controll Typ Menü mit ASP.Net MVC
- 15. ASP.NET MVC 4 Lade-Menü von der Datenbank zu Teilansicht
- 16. Die beste Methode zum Streamen von Dateien in ASP.NET
- 17. Die beste Möglichkeit, mehrere Datenbanken in Laravel zu verbinden
- 18. Die beste Möglichkeit, Arrays in Actionscript zu verbinden
- 19. ASP.NET MVC - RequireJS beste mehrseitige App-Lösung
- 20. Bereitstellen von Daten im Menü in meiner ASP.NET MVC-Masterseite
- 21. ASP.Net MVC - beste Möglichkeit, wiederkehrende Benutzer zu identifizieren
- 22. ASP.NET-MVC 2 RC Beste Funktionen
- 23. Beste Möglichkeit, Beobachter in MVC zu benachrichtigen?
- 24. Dynamisches Menü in MVC
- 25. Beste OpenId API für ASP.NET MVC-Anwendung
- 26. asp.net MVC Responsive Design beste Vorlage
- 27. Die beste Methode zum Ausführen eines Tools von ASP.Net Seite
- 28. HTML5-Formularaktion mit Controller ActionResult-Methode in ASP.NET MVC verbinden 4
- 29. WPF XAML datenbankgesteuertes Kontrollkästchen Werte
- 30. Der beste Ort Text in asp.net Mvc pipline
Alle Links und/oder Artikel zu dieser Methode? –
Ich habe mich über Google umgeschaut und konnte nichts finden, was mit RTM zu tun hat. Das meiste davon waren ältere Sachen, die nicht wirklich auf die veröffentlichte Version anwendbar sind. Ich werde sehen, ob ich ein Beispiel hinzufügen kann. – tvanfosson
Äh, ich weiß nicht so viel über MVC, aber ist das performant? Geht das zur Datenbank mit einer Unterabfrage, nur um das Menü für jede Seitenanfrage zu bekommen? – flipdoubt