Structr
  • Welcome
  • Utilities
    • Abstractions
      • Check
      • Ensure
      • Money
      • HierarchyId
      • Providers
        • SequentialGuidProvider
      • Extensions
        • DateTime
        • Dictionary
        • DirectoryInfo
        • Enumerable
        • Enum
        • Expression
        • Int
        • Long
        • MemberInfo
        • Object
        • Queryable
        • ServiceCollection
        • String
        • Type
      • Helpers
        • AsyncHelper
        • BindHelper
      • JsonConverters
        • DateOnly
        • TimeOnly
        • StringNumber
    • Collections
      • AutoMapper extensions
    • IO
      • FileHelper
      • MimeTypeHelper
      • PathHelper
      • SequentialFileName
    • Configuration
      • Providers
        • JSON-file
        • XML-file
        • In-Memory
        • Consul
      • Get settings
      • Set settings
      • Customization
    • Email
      • Razor
    • Navigation
      • Menu
      • Breadcrumbs
    • Security
  • Domain
    • Domain
      • Entities
      • Value objects
  • Data Access
    • Entity Framework Core
    • Entity Framework 6
  • Use Cases
    • Operations
      • Filtering
      • Decoration
    • Notices
    • Validation
    • Specifications
    • Stateflows
      • StateMachine
      • Configurations
  • Presentation
    • ASP.NET Core
      • Client
      • Http
      • JavaScript
      • Json
      • Mvc
      • Referrer
      • Rewrite
      • Routing
      • TagHelpers
      • Validation
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. Utilities
  2. Navigation

Menu

Example of common menu item:

public class MenuItem : NavigationItem<MenuItem>
{
	public string Action { get; set; }
	public string Controller { get; set; }
	public string Area { get; set; }
	public string Icon { get; set; }
}

INavigation<MenuItem> is the main service to get navigation. INavigation<MenuItem> created once per request within the scope.

For example, create _MenuItem.cshtml and _Menu.cshtml views.

_MenuItem.cshtml:

@model MenuItem

<li data-icon="@Model.Icon" data-id="@Model.Id">
    <a href="@Url.Action(Model.Action, Model.Controller, new { area = Model.Area })" class="@(Model.IsActive ? "active" : "")">@Model.Title</a>
    @if (Model.HasChildren)
    {
        <ul>
            @foreach (var menuItem in Model.Children)
            {
                <partial name="_MenuItem" model="menuItem" />
            }
        </ul>
    }
</li>

_Menu.cshtml:

@using Structr.Navigation
@model INavigation<MenuItem>

<div class="navigation">
    <h4 class="navigation-title">Menu:</h4>
    <ul class="navigation-content">
        @foreach (var menuItem in Model)
        {
            <partial name="_MenuItem" model="menuItem" />
        }
    </ul>
</div>

Then you can inject INavigation<MenuItem>into _Layout.cshtml and use _Menu.cshtml partial view to rendering menu.

_Layout.cshtml:

@using Structr.Navigation
@inject INavigation<MenuItem> menu

<partial name="_Menu" model="menu" />
PreviousNavigationNextBreadcrumbs

Last updated 2 years ago

Was this helpful?