如何在Razor中使用Archetype?

3

我简直不敢相信我在网上找不到例子。

这是我简单的原型设计。 My Archetype

这是我尝试过的:

<img src="@CurrentPage.ctaTopLeft.image" alt="@CurrentPage.ctaTopLeft.text">

但是它会报错:

'Archetype.Models.ArchetypeModel' 不包含 'image' 的定义

编辑: 这个可以解决问题:

<img src="@CurrentPage.GetPropertyValue("ctaTopLeft").Fieldsets[0].GetValue("image")" alt="@CurrentPage.GetPropertyValue("ctaTopLeft").Fieldsets[0].GetValue("text")">

想知道是否有更简短的写法?

2个回答

4
嗯,并不是这样的 - Archetype 属性通常可以拥有一个复杂的、嵌套的数据集合,其中可能也会有嵌套的集合。实际上,如果你有嵌套的 Archetype 属性(这种情况很常见),使用相应的嵌套部分视图来正确呈现它是非常普遍的。

有一些针对这种情况的教程/示例可供参考:

还有其他一些包也被设计成帮助你将 Archetype 属性映射到 POCO 中,例如 https://our.umbraco.org/projects/developer-tools/archetype-mapper/


3
我更喜欢使用类型化的方式获取属性。
var property = Model.Contet.GetPropertyValue<ArchetypeModel>("yourArchetypePropertyAlias");

if (property != null && property.Any()) {
    foreach (var item in property) {
        var imageId = item.GetValue<int>("yourImagePropertyAlias");
        var text = item.GetValue<string>("yourTextPropertyAlias");
    }
}

打字的方式也是我的首选起点;但是,您仍然需要迭代,并且如果您有嵌套的原型属性,则最有可能要使用某种分层的部分视图集。 - Robert Foster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接