【问题标题】:umbraco razor - getting fields from contentumbraco razor - 从内容中获取字段
【发布时间】:2012-06-20 09:33:31
【问题描述】:

我有 6 个相同内容类型的项目“新闻”,在每个项目中我都有一个字段 newsIntro。我想将字段放在另一个页面上的特定页面中,因此我需要定位一个特定字段,因此它可能是节点 1702 上的 newsIntro。我尝试了一些类似

@1720.newsIntro

如何定位特定字段

谢谢

【问题讨论】:

    标签: razor field umbraco umbraco-webforms


    【解决方案1】:

    在学习 Razor 时,您应该看看一些很棒的资源:

    1. Umbraco Razor Feature Walkthrough - 由八部分组成的博文系列,其中包含 Umbraco 4.7 中的许多新 Razor 功能以及示例。

    2. Razor DynamicNode Cheat Sheet - Razor DynamicNode 对象(包括 @Model)可用的所有属性和方法的 PDF。

    3. Cultiv Razor Examples - 一个 Umbraco 网站,您可以下载并使用 WebMatrix 或 IIS 打开,并查看使用 Razor 访问属性的各种方法。

    4. Razor snippets - Our Umbraco 中不同 sn-ps、示例等的汇编。

    但在回答您的问题时,要获取特定节点的属性,您必须首先获取实际的 DynamicNode 对象,然后使用属性别名来访问属性值。示例:

    @{
        //Get the node
        dynamic node = Library.NodeById(1720);
    
        // Display the property
        @node.newsIntro
    }
    

    要从当前页面访问属性,您只需使用Model

    @Model.newsIntro
    

    @Model.bodyText
    

    @Model.Name
    

    【讨论】:

      【解决方案2】:

      首先,从 TypedContent 方法中获取一个 IPublishedContent 对象,然后使用 GetPropertyValue 来检索该字段的值。

      @{
        int nodeId = 1720;
        IPublishedContent contentNode = Umbraco.TypedContent(nodeId);
        var newsIntro = contentNode.GetPropertyValue("newsIntro");
      }
      
      <p>@newsIntro</p>
      

      【讨论】:

      • 这正是我所需要的。我在foreach 循环中需要它,所以它已经有了var item in selection,所以我只是将上面的内容更改为Umbraco.TypedContent(item.Id) 并省略了第一行。完美运行!
      【解决方案3】:

      在 Umbraco 7 中,我使用此代码从不同页面获取属性:

      @Umbraco.Content(1720).newsIntro
      

      【讨论】:

      • foreach 中获取它(例如,使用查询生成器)将硬编码的 id (1720) 替换为 item.Id
      【解决方案4】:

      如果内容项 1720 是您要使用该值的页面的父级或祖先,您可以像这样递归地获取它:

      @Umbraco.Field("newsIntro", recursive: true)
      

      【讨论】:

        【解决方案5】:

        为了从内容中获取字段,我使用了这个:

        @{
            var selection = Umbraco.TypedContent(contentId).Children()
                                .Where(x => x.IsVisible())
                                .OrderBy("CreateDate");
        }
        @foreach(var item in selection){
                    @item.GetPropertyValue("fieldName1")
                    @item.GetPropertyValue("fieldName2")
                    @item.GetPropertyValue("fieldName_N")
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多