我已经实现了 List.cshtml 来为图片库提供自定义显示。这是我第一次尝试用模板覆盖投影,起初它似乎工作正常。然后我注意到,当我尝试访问后端 Orchard 1.7 上的 Projection 时,会出现以下问题:
RuntimeBinderException“Orchard.ContentManagement.ContentItem”不包含“TagsPart”的定义
以下是模板 List.cshtml 中的一些代码:
List<TagRecord> uniqueTags = new List<TagRecord>();
List<dynamic> items = Model.Items;
if (items != null && items.Any())
{
foreach (var item in items)
{
if (item != null && item.ContentItem != null)
{
TagsPart part = item.ContentItem.TagsPart;
if (part != null && part.CurrentTags != null)
{
foreach (var t in part.CurrentTags)
{
if (!uniqueTags.Contains(t))
{
uniqueTags.Add(t);
}
}
}
}
}
我对几点一无所知,我怀疑这可能导致错误:
如何为投影指定模板(比“List.cshtml”更具体)。我可以使用 Placement.info 吗?如何?
我应该如何测试 ContentItem 中是否存在特定部分?只需分配
TagsPart part = item.ContentItem.TagsPart;
就会引发上述异常。
更新:我已将其作为模块实现;也就是说,List.cshtml 位于一个简单模块的 Views 文件夹中。如果我将 List.cshtml 移动到主题,那么问题就会消失。但是,我仍然更喜欢使用模块,以便布局独立于主题。