如何访问 Umbraco Web 模型链接

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

所以我正在重建一个最初位于 Umbraco 7 上的旧网站,并将其放到 Umbraco 8 上(是的,我知道它也接近 EOL,这只是为了安全措施)

我遇到的问题是构建导航菜单。

我可以让它提取正确的链接名称,但 URL 是错误的。

下面的代码显示了我如何获取菜单名称和链接,名称很好。但根据我的理解,链接存储在不同的成员中,而存储在 menuItem.URL() 中的链接不是我想要的。


`  @foreach (var menuItem in root.MenuLink.Children())
  {
      var menuItemHasChildren = menuItem.Children.Any();
      <li class="nav-level-1__item">
          <a href="@menuItem.Url()" class="nav-level-1__link" data-tsat="nav-menu_item" data-nav-title="@menuItem.Name" target="@menuItem.Url()">
              @menuItem.Name
          </a>`

根据我的理解,有一种方法可以在 Umbraco 中强类型链接,但我不是 100% 确定如何做到这一点。

我可以通过执行以下操作找到我想要使用的正确链接:

将我的代码置于调试模式,并在 var menuItemHasChildren = menuItem.Children.Any(); 中放置一个断点

然后,当我将鼠标悬停在 menuItem 上时,它会弹出一个成员列表,在该列表中有一个名为“Link”的列表,在里面我可以单击 [0],然后会弹出另一个成员列表,里面有一个“url”,其中包含正确的网址。

问题是我不能只输入 menuItem.Link 因为它说 Link 不存在。

这是一张显示我想要到达的位置的图片: [Image showing the debug code](https://i.stack.imgur.com/Izrbn.png)

如何访问menuItem内的Link成员。

我尝试了不同的方法来访问 MenuItem 的 Link 成员,但没有任何结果。

我尝试使用此代码,但我只是得到一个空错误:

var umbracoLink = menuLink.Value<Umbraco.Web.Models.Link>("menuItem");

  if (umbracoLink != null)
  {
      // Accessing the URL property of the Umbraco.Web.Models.Link object
      var url = umbracoLink.Url;

      <li class="nav-level-1__item">
          <a href="@url" class="nav-level-1__link" data-tsat="nav-menu_item" data-nav-title="@menuItem.Name" target="@url">
              @menuItem.Name
          </a>
c# model-view-controller umbraco
1个回答
0
投票

您是否使用 Zbu.ModelsBuilder 之类的工具为您的 Umbraco 项目生成强类型的已发布内容模型(后来已移至 Umbraco CMS 核心代码中。)?

如果是,您可以将对象转换为强类型模型并根据需要达到必要的属性。

这里是一个如何做到这一点的示例 - 另请参阅下面 Umbraco 论坛上回答的类似问题:

private static List<fields.Image> GetImageGalleryElementImages(IEnumerable<IPublishedContent> images)
{
    var elementImages = new List<fields.Image>();

    if (images != null && images.Any())
    {
        foreach (var item in images)
        {
            if (item is Image)
            {
                // CASTING: Cast item to ModelsBuilder model and reach its properties afterwards
                var modelsBuilderValue = item as Image;

                elementImages.Add(new fields.Image()
                {
                    Url = modelsBuilderValue.Url,// todo: obsolete
                    Alt = modelsBuilderValue.Alt
                });
            }
        }
    }

    return elementImages;
}

https://our.umbraco.com/forum/using-umbraco-and-getting-started/103099-rendering-links-to-view-in-umbraco-8#comment-322214

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