【发布时间】:2012-06-20 09:33:31
【问题描述】:
我有 6 个相同内容类型的项目“新闻”,在每个项目中我都有一个字段 newsIntro。我想将字段放在另一个页面上的特定页面中,因此我需要定位一个特定字段,因此它可能是节点 1702 上的 newsIntro。我尝试了一些类似
@1720.newsIntro
如何定位特定字段
谢谢
【问题讨论】:
标签: razor field umbraco umbraco-webforms
我有 6 个相同内容类型的项目“新闻”,在每个项目中我都有一个字段 newsIntro。我想将字段放在另一个页面上的特定页面中,因此我需要定位一个特定字段,因此它可能是节点 1702 上的 newsIntro。我尝试了一些类似
@1720.newsIntro
如何定位特定字段
谢谢
【问题讨论】:
标签: razor field umbraco umbraco-webforms
在学习 Razor 时,您应该看看一些很棒的资源:
Umbraco Razor Feature Walkthrough - 由八部分组成的博文系列,其中包含 Umbraco 4.7 中的许多新 Razor 功能以及示例。
Razor DynamicNode Cheat Sheet - Razor DynamicNode 对象(包括 @Model)可用的所有属性和方法的 PDF。
Cultiv Razor Examples - 一个 Umbraco 网站,您可以下载并使用 WebMatrix 或 IIS 打开,并查看使用 Razor 访问属性的各种方法。
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
【讨论】:
首先,从 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) 并省略了第一行。完美运行!
在 Umbraco 7 中,我使用此代码从不同页面获取属性:
@Umbraco.Content(1720).newsIntro
【讨论】:
foreach 中获取它(例如,使用查询生成器)将硬编码的 id (1720) 替换为 item.Id。
如果内容项 1720 是您要使用该值的页面的父级或祖先,您可以像这样递归地获取它:
@Umbraco.Field("newsIntro", recursive: true)
【讨论】:
为了从内容中获取字段,我使用了这个:
@{
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")
}
【讨论】: