检索面包屑痕迹 html,这样我就知道我来自哪个页面

问题描述 投票:0回答:1

我正在尝试弄清楚我来自什么 asp.net core 6 razor 视图,以便我知道在我的面包路径中放入什么。

我有以下 html 扩展来构建面包屑路径 -

using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.IO;
using System.Text.Json;
using YellowFeverPortal.Web.Models;

namespace YellowFeverPortal.Web.Extensions
{
    public static class HtmlExtensions
    {
        private static readonly HtmlContentBuilder _emptyBuilder = new HtmlContentBuilder();

        public static Rootobject _ob;
        public static string _vaccineClinicId;

        public static IHtmlContent BuildBreadcrumbNavigation(this IHtmlHelper helper)
        {
            string jsonData = File.ReadAllText("BreadcrumbMap.json");
            _ob = JsonSerializer.Deserialize<Rootobject>(jsonData);


            if (helper.ViewContext.RouteData.Values["controller"] is null)
            {
                return _emptyBuilder;
            }

            if (helper.ViewContext.RouteData.Values["controller"].ToString() == "Home" ||
                helper.ViewContext.RouteData.Values["controller"].ToString() == "Account")
            {
                return _emptyBuilder;
            }

            string controllerName = helper.ViewContext.RouteData.Values["controller"].ToString();
            string actionName = helper.ViewContext.RouteData.Values["action"].ToString();

            string theId = string.Empty;

            if (helper.ViewContext.RouteData.Values["id"] is not null)
            {
                theId = helper.ViewContext.RouteData.Values["id"].ToString();
            }

            var breadcrumb = new HtmlContentBuilder().AppendHtml("<ol class='breadcrumb'>");

            if (!helper.ViewContext.HttpContext.User.IsInRole("VCStaff"))
            {

                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFDashboard.Name.TitleSize(), _ob.YFDashboard.Action, _ob.YFDashboard.Controller, theId));

                if (actionName.Equals(_ob.YFVCList.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVCList.Name.TitleSize(), _ob.YFVCList.Action, _ob.YFVCList.Controller, theId));
                }
            }

            // New YFVC Trail
            if (actionName.Equals(_ob.NewYFVC.Action, StringComparison.OrdinalIgnoreCase))
            {
                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.NewYFVC.Name.TitleSize(), _ob.NewYFVC.Action, _ob.NewYFVC.Controller, theId));
            }

            // Annual Figures List
            if (controllerName.Equals(_ob.ListAnnualFigures.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (actionName.Equals(_ob.ListAnnualFigures.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.ListAnnualFigures.Name.TitleSize(), _ob.ListAnnualFigures.Action, _ob.ListAnnualFigures.Controller, theId));
                }
            }

            // YFVC Dashboard Trail
            if (controllerName.Equals(_ob.YFVC.Controller, StringComparison.OrdinalIgnoreCase) || controllerName.Equals(_ob.YFVCDetails.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (controllerName.Equals(_ob.YFVC.Controller, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, theId));
                }

                if (controllerName.Equals(_ob.YFVCDetails.Controller, StringComparison.OrdinalIgnoreCase))
                {
                    if (actionName.Equals(_ob.YFVCDetails.Action, StringComparison.OrdinalIgnoreCase))
                    {
                        breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, theId));
                        breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVCDetails.Name.TitleSize(), _ob.YFVCDetails.Action, _ob.YFVCDetails.Controller, theId));
                    }
                }
            }

            // Desination  trail
            if (controllerName.Equals(_ob.Designations.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (!actionName.Equals(_ob.Editdesignation.Action, StringComparison.OrdinalIgnoreCase))
                {
                    _vaccineClinicId = theId;
                }

                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, _vaccineClinicId));
                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.Designations.Name.TitleSize(), _ob.Designations.Action, _ob.Designations.Controller, _vaccineClinicId));

                if (actionName.Equals(_ob.CurrentDesignation.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.CurrentDesignation.Name.TitleSize(), _ob.CurrentDesignation.Action, _ob.CurrentDesignation.Controller, _vaccineClinicId));
                }

                if (actionName.Equals(_ob.Editdesignation.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.Editdesignation.Name.TitleSize(), _ob.Editdesignation.Action, _ob.Editdesignation.Controller, theId));
                }
            }

            //Training Trail
            if (controllerName.Equals(_ob.TrainingList.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (!actionName.Equals(_ob.TrainingUpdate.Action, StringComparison.OrdinalIgnoreCase))
                {
                    _vaccineClinicId = theId;
                }

                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, _vaccineClinicId));
                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.TrainingList.Name.TitleSize(), _ob.TrainingList.Action, _ob.TrainingList.Controller, _vaccineClinicId));

                if (actionName.Equals(_ob.TrainingNew.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.TrainingNew.Name.TitleSize(), _ob.TrainingNew.Action, _ob.TrainingNew.Controller, _vaccineClinicId));
                }

                if (actionName.Equals(_ob.TrainingUpdate.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.TrainingUpdate.Name.TitleSize(), _ob.TrainingUpdate.Action, _ob.TrainingUpdate.Controller, theId));
                }
            }

            //Annual Figures  trail
            if (controllerName.Equals(_ob.AnnualFiguresList.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (!actionName.Equals(_ob.ListAnnualFigures.Action, StringComparison.OrdinalIgnoreCase))
                {
                    if (!actionName.Equals(_ob.AnnualFiguresUpdate.Action, StringComparison.OrdinalIgnoreCase) && !actionName.Equals(_ob.AnnualFigureFormsUpdate.Action, StringComparison.OrdinalIgnoreCase))
                    {
                        _vaccineClinicId = theId;
                    }

                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, _vaccineClinicId));
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AnnualFiguresList.Name.TitleSize(), _ob.AnnualFiguresList.Action, _ob.AnnualFiguresList.Controller, _vaccineClinicId));

                    if (actionName.Equals(_ob.AnnualFiguresNew.Action, StringComparison.OrdinalIgnoreCase))
                    {
                        breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AnnualFiguresNew.Name.TitleSize(), _ob.AnnualFiguresNew.Action, _ob.AnnualFiguresNew.Controller, _vaccineClinicId));
                    }

                    if (actionName.Equals(_ob.AnnualFiguresUpdate.Action, StringComparison.OrdinalIgnoreCase))
                    {
                        breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AnnualFiguresUpdate.Name.TitleSize(), _ob.AnnualFiguresUpdate.Action, _ob.AnnualFiguresUpdate.Controller, theId));
                    }

                    if (actionName.Equals(_ob.AnnualFigureFormsUpdate.Action, StringComparison.OrdinalIgnoreCase))
                    {
                        breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AnnualFigureFormsUpdate.Name.TitleSize(), _ob.AnnualFigureFormsUpdate.Action, _ob.AnnualFigureFormsUpdate.Controller, theId));
                    }
                }
            }

            //Audit List Trail
            if (controllerName.Equals(_ob.AuditList.Controller, StringComparison.OrdinalIgnoreCase))
            {
                if (!actionName.Equals(_ob.AuditDetails.Action, StringComparison.OrdinalIgnoreCase))
                {
                    _vaccineClinicId = theId;
                }

                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.YFVC.Name.TitleSize(), _ob.YFVC.Action, _ob.YFVC.Controller, _vaccineClinicId));
                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AuditList.Name.TitleSize(), _ob.AuditList.Action, _ob.AuditList.Controller, _vaccineClinicId));

                if (actionName.Equals(_ob.AuditDetails.Action, StringComparison.OrdinalIgnoreCase))
                {
                    breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.AuditDetails.Name.TitleSize(), _ob.AuditDetails.Action, _ob.AuditDetails.Controller, theId));
                }
            }

            if (controllerName.Equals(_ob.Reports.Controller, StringComparison.OrdinalIgnoreCase))
            {
                breadcrumb = breadcrumb.AppendHtml(Build(helper, _ob.Reports.Name.TitleSize(), "", _ob.Reports.Controller, ""));
            }

            return breadcrumb.AppendHtml("</ol>");
        }

        private static IHtmlContentBuilder Build(IHtmlHelper helper, string title, string actionName, string controller, string Id)
        {
            var breadcrumb = new HtmlContentBuilder()
                                    .AppendHtml("<li class='breadcrumb-item'>")
                                    .AppendHtml(helper.ActionLink(title, actionName, controller, new { id = Id }, null))
                                    .AppendHtml("</li>");

            return breadcrumb;
        }
    }
}

我的面包屑地图示例 -

{
  "YFDashboard": {
    "Name": "YF Dashboard",
    "Controller": "yfdashboard",
    "Action": "DisplayDashboard"
  },
  "YFVCList": {
    "Name": "YFVC List",
    "Controller": "vaccinationclinic",
    "Action": "index"
  },
  "NewYFVC": {
    "Name": "New YFVC",
    "Controller": "VaccinationClinic",
    "Action": "New"
  }

我的面包屑模型 -

using System.ComponentModel.DataAnnotations.Schema;

namespace YellowFeverPortal.Web.Models
{
    [NotMapped]
    public class Rootobject
    {
        public YFDashboard YFDashboard { get; set; }
        public Yfvclist YFVCList { get; set; }
        public Newyfvc NewYFVC { get; set; }
        public Yfvcdetails YFVCDetails { get; set; }
        public YFVC YFVC { get; set; }
        public Designations Designations { get; set; }
        public Currentdesignation CurrentDesignation { get; set; }
        public Editdesignation Editdesignation { get; set; }
        public Traininglist TrainingList { get; set; }
        public Trainingnew TrainingNew { get; set; }
        public Trainingupdate TrainingUpdate { get; set; }
        public Annualfigureslist AnnualFiguresList { get; set; }
        public Annualfiguresnew AnnualFiguresNew { get; set; }
        public Annualfiguresupdate AnnualFiguresUpdate { get; set; }
        public AnnualfigureFormsUpdate AnnualFigureFormsUpdate { get; set; }
        public Listannualfigures ListAnnualFigures { get; set; }
        public Auditlist AuditList { get; set; }
        public Auditdetails AuditDetails { get; set; }
        public Reports Reports { get; set; }
    }

    [NotMapped]
    public class YFDashboard
    {
        public string Name { get; set; }
        public string Controller { get; set; }
        public string Action { get; set; }
    }


    [NotMapped]
    public class Yfvclist
    {
        public string Name { get; set; }
        public string Controller { get; set; }
        public string Action { get; set; }
    }

    [NotMapped]
    public class Newyfvc
    {
        public string Name { get; set; }
        public string Controller { get; set; }
        public string Action { get; set; }
    }

    [NotMapped]
    public class Yfvcdetails
    {
        public string Name { get; set; }
        public string Controller { get; set; }
        pub#

我的面包屑路径是从我的 _Layout.cshtml 调用的 -

<div id="maincontent" class="container">

    <nav aria-label="breadcrumb">
        <!-- #region Breadcrumb -->
        @Html.BuildBreadcrumbNavigation()
        <!-- #endregion -->
    </nav>

    <main role="main" class="pb-3">
        @RenderBody()
    </main>
</div>

我想知道我来自哪个剃刀视图,以便我可以正确构建面包屑路径。我想我是否可以获得面包屑 html 例如

<ol class="breadcrumb">
   <li class="breadcrumb-item">
      <a href="/yfdashboard/DisplayDashboard">YF Dashboard</a>
   </li>
   <li class="breadcrumb-item">
      <a href="/vaccinationclinic">YFVC List</a>
   </li>
</ol>

我会知道 YFVCList 视图是我来自的视图。

这是否可能,或者是否有更简单的方法来找到您来自哪个视图?

c# asp.net-core breadcrumbs
1个回答
0
投票

这是您可以遵循的示例:

public static class HtmlExtensions
{
    // Other code...

    public static void StorePreviousView(HttpContext httpContext)
    {
        httpContext.Session.SetString("PreviousController", httpContext.Request.RouteValues["controller"].ToString());
        httpContext.Session.SetString("PreviousAction", httpContext.Request.RouteValues["action"].ToString());
    }

    public static IHtmlContent BuildBreadcrumbNavigation(this IHtmlHelper helper, HttpContext httpContext)
    {
        // Other code...

        var previousController = httpContext.Session.GetString("PreviousController");
        var previousAction = httpContext.Session.GetString("PreviousAction");

        // Use previousController and previousAction to determine the previous view
        // and adjust breadcrumb trail accordingly.

        // Other code...
    }
}

然后,在控制器操作中,调用

HtmlExtensions.StorePreviousView(HttpContext)
来存储之前的控制器和操作。

© www.soinside.com 2019 - 2024. All rights reserved.