画像ギャラリーのカスタム表示を提供するために 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);
}
}
}
}
}
私は、エラーの原因であると思われるいくつかの点について無知です。
Projection のテンプレートを指定する方法 ('List.cshtml' より具体的)。Placement.info を使用できますか? どのように?
ContentItem 内の特定の部分の存在をテストするにはどうすればよいですか? 割り当てるだけ
TagsPart part = item.ContentItem.TagsPart;
で上記の例外がスローされます。
更新:これをモジュールとして実装しました。つまり、List.cshtml は単純なモジュールの Views フォルダーにありました。List.cshtml をテーマに移動すると、問題はなくなります。ただし、レイアウトがテーマに依存しないように、モジュールを使用することをお勧めします。