Asp.net core 如何在cloudscribe导航中的面包屑中实现路由参数?

Asp.net core 如何在cloudscribe导航中的面包屑中实现路由参数?,asp.net-core,.net-core,asp.net-core-2.0,cloudscribe,Asp.net Core,.net Core,Asp.net Core 2.0,Cloudscribe,我正在使用cloudscribe导航构建侧栏和相关的面包屑菜单 我在帮助文档中找不到它,所以在这里发布 我们的路由模板中有一些路由参数-我不确定如何在面包屑中保留这些参数,导航参数保留DrooterParameters我知道这些参数只适用于查询字符串参数 我们的路线是这样的: {批发商客户代码}/{area:exists}/{baseItemId:guid}/{controller=Home}/{action=Index}/{id:guid?} 这会转化为: 现在,当我在/Detail视图上时

我正在使用cloudscribe导航构建侧栏和相关的面包屑菜单

我在帮助文档中找不到它,所以在这里发布

我们的路由模板中有一些路由参数-我不确定如何在面包屑中保留这些参数,导航参数保留DrooterParameters我知道这些参数只适用于查询字符串参数

我们的路线是这样的:

{批发商客户代码}/{area:exists}/{baseItemId:guid}/{controller=Home}/{action=Index}/{id:guid?}

这会转化为:

现在,当我在/Detail视图上时-它嵌套得很深-但是breadcrumb中的前一个父级丢失了baseItemId值-有没有建议如何在breadcrumb层次结构中保留路由参数

我尝试了以下步骤,只是为了测试它是否会拾取“保留路由”参数,但没有成功

<Children>
                    <NavNode
                    key="d902daaa-99ec-488a-85de-c03641fb547d"
                    area="Service"
                    controller="Home"
                    action="Detail"
                    text="Service"
                    iconCssClass=""
                    componentVisibility="breadcrumbs"
                    viewRoles="Administrator"
                    preservedRouteParameters="baseItemId"
                    >
                        <Children>
                            <NavNode
                            key="3047c57d-0f8c-4875-aff9-9c1f91909e41"
                            area="Service"
                            controller="RecurringCredit"
                            action="Edit"
                            text="Recurring Credit"
                            iconCssClass=""
                            componentVisibility="breadcrumbs"
                            viewRoles="Administrator"
                            preservedRouteParameters="baseItemId"
                            >
                            </NavNode></Children></NavNode>

的确,PreservedLoteParameters仅适用于查询字符串参数。 一种可能的解决方案是使用控制器操作中用于详细视图的代码根据需要更新父面包屑的url。相关文件如下:


这将在当前请求的生命周期内更新给定菜单节点的url。的确,PreservedLoteParameters仅适用于查询字符串参数。 一种可能的解决方案是使用控制器操作中用于详细视图的代码根据需要更新父面包屑的url。相关文件如下:


这将在当前请求的生命周期内更新给定菜单节点的url

假设您在cloudscribe.Web.Navigation/Views中有以下默认的bootstrapbreadcrumps视图:

@using cloudscribe.Web.Navigation
@model NavigationViewModel
@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
{
    <ul class="breadcrumb">
    @foreach (var node in Model.ParentChain)
    {
        if (!Model.ShouldAllowView(node)) { continue; }
        if (node.EqualsNode(Model.CurrentNode))
        {
            if (Model.TailCrumbs != null)
            {
                <li><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a><span class="divider"></span></li>
            }
            else
            {
                <li class="active">@Model.AdjustText(node)</li>
            }
        }
        else
        {
            <li><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a><span class="divider"></span></li>
        }
    }
    @if (Model.TailCrumbs != null)
    {
        foreach (var n in Model.TailCrumbs)
        {
            <li class="active">@n.Text</li>
        }
    }
    </ul>
}
使用cloudscribe.Web.Navigation @模型导航视图模型 @如果(Model.CurrentNode!=null&&(Model.ParentChain.Count>1 | |(Model.TailCrumbs!=null&&Model.TailCrumbs.Count>0))) {
    @foreach(Model.ParentChain中的var节点) { 如果(!Model.ShouldAllowView(node)){continue;} if(node.EqualsNode(Model.CurrentNode)) { 如果(Model.tailcrumps!=null) {
  • } 其他的 {
  • @Model.AdjustText(节点)
  • } } 其他的 {
  • } } @如果(Model.tailcrumps!=null) { foreach(模型中的var n.尾屑) {
  • @n.Text
  • } }
} 而不是使用Model.AdjustUrl绕过它,而是使用asp route-*helper

@using cloudscribe.Web.Navigation
@model NavigationViewModel
@{
    var id = ViewContext.RouteData.Values["id"];
    var baseItemId = ViewContext.RouteData.Values["baseItemId"];
    var orderId = ViewContext.HttpContext.Request.Query["orderId"];
}

@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
{
    <ul class="breadcrumb">
    @foreach (var node in Model.ParentChain)
    {
        if (!Model.ShouldAllowView(node)) { continue; }
        if (node.EqualsNode(Model.CurrentNode))
        {
            if (Model.TailCrumbs != null)
            {
                <li><a asp-area="@node.Value.Area" asp-controller="@node.Value.Controller" asp-action="@node.Value.Action" asp-route-baseItemId="@baseItemId" asp-route-orderId="@orderId" asp-route-id="@id">
                    @Model.AdjustText(node)
                    </a>
                    <span class="divider"></span>
                </li>
            }
            else
            {
                <li class="active">@Model.AdjustText(node)</li>
            }
        }
        else
        {
            <li><a asp-area="@node.Value.Area" asp-controller="@node.Value.Controller" asp-action="@node.Value.Action" asp-route-baseItemId="@baseItemId" asp-route-orderId="@orderId" asp-route-id="@id">@Model.AdjustText(node)</a><span class="divider"></span></li>
        }
    }
    @if (Model.TailCrumbs != null)
    {
        foreach (var n in Model.TailCrumbs)
        {
            <li class="active">@n.Text</li>
        }
    }
    </ul>
}
使用cloudscribe.Web.Navigation @模型导航视图模型 @{ var id=ViewContext.RouteData.Values[“id”]; var baseItemId=ViewContext.RouteData.Values[“baseItemId”]; var orderId=ViewContext.HttpContext.Request.Query[“orderId”]; } @如果(Model.CurrentNode!=null&&(Model.ParentChain.Count>1 | |(Model.TailCrumbs!=null&&Model.TailCrumbs.Count>0))) {
    @foreach(Model.ParentChain中的var节点) { 如果(!Model.ShouldAllowView(node)){continue;} if(node.EqualsNode(Model.CurrentNode)) { 如果(Model.tailcrumps!=null) {
  • @模型文本(节点)
  • } 其他的 {
  • @Model.AdjustText(节点)
  • } } 其他的 {
  • @模型文本(节点)
  • } } @如果(Model.tailcrumps!=null) { foreach(模型中的var n.尾屑) {
  • @n.Text
  • } }
} 此实现有一些缺点,可能不适用于所有人-例如,以前的所有面包屑层次结构现在在路由中都有baseItemId- e、 g

仪表板/所有注释/注释/详细信息

在这里,所有注释也将添加baseItemId,尽管它不需要它-


但它对我们来说很有用,因为它是一个管理门户(没有SEO要求)和我们的路线模板的映射方式

假设您在cloudscribe.Web.Navigation/Views中有以下默认的bootstrapbreadcrumps视图:

@using cloudscribe.Web.Navigation
@model NavigationViewModel
@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
{
    <ul class="breadcrumb">
    @foreach (var node in Model.ParentChain)
    {
        if (!Model.ShouldAllowView(node)) { continue; }
        if (node.EqualsNode(Model.CurrentNode))
        {
            if (Model.TailCrumbs != null)
            {
                <li><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a><span class="divider"></span></li>
            }
            else
            {
                <li class="active">@Model.AdjustText(node)</li>
            }
        }
        else
        {
            <li><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a><span class="divider"></span></li>
        }
    }
    @if (Model.TailCrumbs != null)
    {
        foreach (var n in Model.TailCrumbs)
        {
            <li class="active">@n.Text</li>
        }
    }
    </ul>
}
使用cloudscribe.Web.Navigation @模型导航视图模型 @如果(Model.CurrentNode!=null&&(Model.ParentChain.Count>1 | |(Model.TailCrumbs!=null&&Model.TailCrumbs.Count>0))) {
    @foreach(Model.ParentChain中的var节点) { 如果(!Model.ShouldAllowView(node)){continue;} if(node.EqualsNode(Model.CurrentNode)) { 如果(Model.tailcrumps!=null) {
  • } 其他的 {
  • @Model.AdjustText(节点)
  • } } 其他的 {
  • } } @如果(Model.tailcrumps!=null) { foreach(模型中的var n.尾屑) {
  • @n.Text
  • } }
} 而不是使用Model.AdjustUrl绕过它,而是使用asp route-*helper

@using cloudscribe.Web.Navigation
@model NavigationViewModel
@{
    var id = ViewContext.RouteData.Values["id"];
    var baseItemId = ViewContext.RouteData.Values["baseItemId"];
    var orderId = ViewContext.HttpContext.Request.Query["orderId"];
}

@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
{
    <ul class="breadcrumb">
    @foreach (var node in Model.ParentChain)
    {
        if (!Model.ShouldAllowView(node)) { continue; }
        if (node.EqualsNode(Model.CurrentNode))
        {
            if (Model.TailCrumbs != null)
            {
                <li><a asp-area="@node.Value.Area" asp-controller="@node.Value.Controller" asp-action="@node.Value.Action" asp-route-baseItemId="@baseItemId" asp-route-orderId="@orderId" asp-route-id="@id">
                    @Model.AdjustText(node)
                    </a>
                    <span class="divider"></span>
                </li>
            }
            else
            {
                <li class="active">@Model.AdjustText(node)</li>
            }
        }
        else
        {
            <li><a asp-area="@node.Value.Area" asp-controller="@node.Value.Controller" asp-action="@node.Value.Action" asp-route-baseItemId="@baseItemId" asp-route-orderId="@orderId" asp-route-id="@id">@Model.AdjustText(node)</a><span class="divider"></span></li>
        }
    }
    @if (Model.TailCrumbs != null)
    {
        foreach (var n in Model.TailCrumbs)
        {
            <li class="active">@n.Text</li>
        }
    }
    </ul>
}
使用cloudscribe.Web.Navigation @模型导航视图模型 @{ var id=ViewContext.RouteData.Values[“id”]; var baseItemId=ViewContext.RouteData.Values[“baseItemId”]; var orderId=ViewContext.HttpContext.Request.Query[“orderId”]; } @如果(Model.CurrentNode!=null&&(Model.ParentChain.Count>1 | |(Model.TailCrumbs!=null&&Model.TailCrumbs.Count>0))) {
    @foreach(Model.Paren中的var节点