Razor “动态下拉菜单”;“生成”;从翁布拉科后端可能吗?

Razor “动态下拉菜单”;“生成”;从翁布拉科后端可能吗?,razor,umbraco,umbraco7,Razor,Umbraco,Umbraco7,我正在尝试用链接填充标题。我现在有两个下拉列表。我想使用Umbraco和Razor填充链接,所以没有硬编码。这可以很容易地完成(参见下面的代码),但是填充下拉列表是一个棘手的部分 我不确定如何以一种好的方式填充下拉列表。它们不是子页面或诸如此类的东西,但它们只是使标题宽度减小的下拉列表。以下是我如何通过抓取Umbraco中的链接,使用Razor填充标题: var home = CurrentPage.Site(); @foreach (var item in home.Children.Whe

我正在尝试用链接填充标题。我现在有两个下拉列表。我想使用Umbraco和Razor填充链接,所以没有硬编码。这可以很容易地完成(参见下面的代码),但是填充下拉列表是一个棘手的部分

我不确定如何以一种好的方式填充下拉列表。它们不是子页面或诸如此类的东西,但它们只是使标题宽度减小的下拉列表。以下是我如何通过抓取Umbraco中的链接,使用Razor填充标题:

var home = CurrentPage.Site();

@foreach (var item in home.Children.Where("Visible"))
{
    <li class="@(item.IsAncestorOrSelf(CurrentPage) ? "active" : null)">
        <a href="@item.Url" class="nav-link">@Umbraco.GetDictionaryValue(item.Name)</a>
    </li>
}
这将产生如下结果:

我不希望任何链接受此影响,因为链接或页面实际上与标题的布局没有任何关系。以下是一些示例URL:

/en/about-us/
/en/history/
/en/our-products/
/en/tips/
我希望这是有道理的


有没有一种简单的好方法可以做到这一点?

有几种方法可以做到这一点。我通常在网站上进行主导航的方式是使用多内容选择器或类似的工具来选择我希望在导航中显示的项目

在您的示例中,子菜单项实际上并不在父菜单项的下面。您可以为每个下拉列表创建一个选择器,比如在主节点上,然后为每个下拉列表选择页面


但是,如果您计划使导航更灵活,您可能需要做一些更有趣的事情,您可以看看嵌套内容包之类的东西来帮助您做到这一点?

因此我找到了一种很好的方法。我只需要创建一个文档类型设置为Dropdown的内容,然后设置标题(基本上是标签),然后为下拉列表的子项添加权限

@foreach (var item in selection)
{
    if (item.GetPropertyValue<bool>("showDropdown"))
    {
        <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                @item.GetVortoValue("Title")
            </a>
            <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                @foreach (var child in item.Children)
                {
                    <a class="dropdown-item" href="@child.Url">@child.GetVortoValue("Title")</a>
                }
            </div>
        </li>
    }
    else
    {
        <li>
            <a href="@item.Url" class="nav-link">@item.GetVortoValue("Title")</a>
        </li>
    }
}
@foreach(选择中的变量项)
{
if(item.GetPropertyValue(“showDropdown”))
{
  • @foreach(item.Children中的变量child) { }
  • } 其他的 {
  • } }
    我首先创建了一个名为“Dropdown”的文档类型。此文档类型的唯一用途是作为下拉列表中页面的父级。然后我将权限设置为允许我必须在下拉列表中的两个页面,并将母版上的权限设置为允许下拉文档类型


    然后,我在主控文档类型上创建了一个新属性,称为“ShowDropdown”。如果勾选此项,它将在页面上显示下拉列表。我不得不这样做,因为不管怎样,带有子项(
    if(item.children.Any())
    )的页面都是正确的。

    很抱歉,回答得太晚了。如果我想这样做,导航不会出现在我所有的页面上吗?我有一个主文档类型,它基本上包含所有子页面。如果我在母版页上创建一个新属性(因为我希望它显示在所有页面上),该属性也会显示在子页面上。那不是很糟糕吗?因为我基本上只需要在我的主机上使用它。您应该只在主页节点上拥有该属性。如果您的所有页面都继承了它,正如您所说,您将遇到问题。但我通常不会让我的所有页面都从主页继承。如果你的所有页面都不是从母版页继承的,那么你如何抓取所有页面?如何创建一个可由所有页面继承的属性(如SEO标题、描述等)?您可以使用组合。根据我的经验,这比继承要好得多,因为这意味着你不必继承你不需要的属性。所以你会有一篇关于搜索引擎优化的文章,一篇关于跟踪的文章,等等。这里有一篇很好的博文:你能说几句话吗?我似乎不能把所有这些事情都放在心上,这真是太遗憾了,因为我真的,真的很想。我需要我的所有网页继承搜索引擎优化。所有页面及其子页面都需要SEO,所以我的主文档类型将有一个SEO属性选项卡,对吗?让我们想象一下,我希望页脚上有一些属性,所有页面都有这些属性。页脚放在我的主
    .cshtml
    文件中。如何将属性仅放在母版页上,而所有其他页面都不会从母版页继承(将属性放在其他页面上毫无意义)。
    @foreach (var item in selection)
    {
        if (item.GetPropertyValue<bool>("showDropdown"))
        {
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    @item.GetVortoValue("Title")
                </a>
                <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                    @foreach (var child in item.Children)
                    {
                        <a class="dropdown-item" href="@child.Url">@child.GetVortoValue("Title")</a>
                    }
                </div>
            </li>
        }
        else
        {
            <li>
                <a href="@item.Url" class="nav-link">@item.GetVortoValue("Title")</a>
            </li>
        }
    }