[asp.net]Umbraco 7︰ 从儿童页在 foreach 得到 Umbraco.Field('"name")

发布时间: 2016/11/13 1:40:55
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我已经安装了 Umbraco 7.1.5 使用 NuGet 和 VS2013。我有获取文档树,并相应地填充菜单 MainMenu 局部视图︰

var homePage = CurrentPage.AncestorsOrSelf(1).First();
var menuItems = homePage.Children.Where("UmbracoNaviHide == false"); 

<ul class="nav">
<li class="@(CurrentPage.Url == "/" ? "current_page_item" : null)"><a class="Lvl1 home" href="/">Home</a></li>

@foreach (var item in menuItems)
{    
  <li class="@(CurrentPage.Id == item.Id ? "current_page_item" : null) Col1">
    <a class="lvl1 parent" href="@item.Url">@item.Name</a>

    @{var subMenuItems = item.Children.Where("UmbracoNaviHide == false");}

    @if (subMenuItems.Count() > 0)
    {
        <ul>
            @foreach (var sub in subMenuItems)
            {
              ????  @Umbraco.Field("menuItemImage", recursive: true) ?????

                <li><a class="parent" href="@sub.Url">@sub.Name</a></li>
            }
        </ul>
    }
  </li>
}
</ul>

Q︰ 怎样才能 @Umbraco.Field ("menuItemImage",递归︰ true) (上传类型) 中第二个 foreach 每一个子菜单项?

解决方法 1:

使用 GetPropertyValue 从 IPublishedContent 接口。

@foreach (var sub in subMenuItems)
{
    // will only work if image is mandatory, otherwise the inner value can be null.  
    // In that case you need to add an extra check
    var img = Umbraco.TypedMedia(sub.GetPropertyValue<string>("menuItemImage", recurse:true))
    <img src="@img.Url" alt="sub.Name" />
    <li><a class="parent" href="@sub.Url">@sub.Name</a></li>
 }

更新

因为您正在使用动态你也能做到 @sub.menuItemImage 。 因为我不太喜欢的动力学,我锻炼身体使用 Model.Content 而不是 CurrentPage 。 这样,您将收到在 visual studio 中由于智能感知 Model.Content 被强类型。

赞助商