_MenuItem.cshtml 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. @model bitforum.Constants.Menu;
  2. @inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
  3. @{
  4. // 현재 요청 경로 가져오기
  5. var currentPath = HttpContextAccessor.HttpContext?.Request?.Path.ToString()?.TrimEnd('/');
  6. // 고정된 메뉴 경로
  7. var menuPath = (Model.Path?.TrimEnd('/') ?? string.Empty);
  8. // 활성화 여부 확인
  9. var isActive = !string.IsNullOrEmpty(currentPath) && !string.IsNullOrEmpty(menuPath) &&
  10. (currentPath.Equals(menuPath, StringComparison.OrdinalIgnoreCase) ||
  11. currentPath.StartsWith(menuPath + "/", StringComparison.OrdinalIgnoreCase) ||
  12. menuPath.StartsWith(currentPath + "/", StringComparison.OrdinalIgnoreCase));
  13. }
  14. <li class="nav-item">
  15. <a href="@Model.Path" class="nav-link @(isActive ? "active" : "")"
  16. @Html.Raw(Model.Children != null && Model.Children.Any() ? "data-bs-toggle=\"collapse\"" : "")
  17. @Html.Raw(Model.Children != null && Model.Children.Any() ? $"data-bs-target=\"#menu-{Model.Id}\"" : "")
  18. >
  19. @if (!string.IsNullOrEmpty(Model.Icon))
  20. {
  21. @Html.Raw(Model.Icon);
  22. }
  23. @Model.Name
  24. </a>
  25. @if (Model.Children != null && Model.Children.Any())
  26. {
  27. <ul id="menu-@Model.Id" class="nav flex-column flex-nowrap ps-3 collapse">
  28. @foreach (var child in Model.Children)
  29. {
  30. @Html.Partial("_MenuItem", child);
  31. }
  32. </ul>
  33. }
  34. </li>