user772436
user772436

Reputation: 51

Implementing List.cshtml for Projection throws 'Orchard.ContentManagement.ContentItem' does not contain a definition for 'TagsPart'

I have implemented List.cshtml to provide a custom display for an image gallery. This is the first time I have tried to override a Projection with a Template and at first it seemed to work fine. Then I noticed that when I try to access the Projection on the backend Orchard 1.7 falls over with:

RuntimeBinderException 'Orchard.ContentManagement.ContentItem' does not contain a definition for 'TagsPart'

Here is some code from the template 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);
                    }
                }
            }
        }
    }

I am ignorant on a couple of points, which I suspect may be causing the error:

  1. How to specify a template for a Projection (more specific than 'List.cshtml'). Can I use Placement.info? How?

  2. How should I test for the presence of a specific part in the ContentItem? Just assigning TagsPart part = item.ContentItem.TagsPart; throws the exception above.

UPDATE: I had implemented this as a Module; that is, the List.cshtml was in the Views folder of a simple Module. If I move List.cshtml to the Theme then the problem goes away. However, I would still prefer to use a module so that the layout is independent of the theme.

Upvotes: 0

Views: 1153

Answers (2)

user772436
user772436

Reputation: 51

Orchard 1.7 includes a new query layout provider called 'Shape'. I simply used this provider, gave it a Shape Type of 'LightboxIsotope', and created a view called 'LightboxIsotope.cshtml'.

Upvotes: 1

Nuno Duarte
Nuno Duarte

Reputation: 1

In a projection you can customize the html rendered for each property on the List. In order to acomplish this you need to go to your query, and add a new Layout, choose the properties you need, and set everything you want.

If the layouts provided in the Queries Module don´t fullfill your requirements, you can allways create your own layout provider, this blog post shows an example:

http://www.stevetaylor.me.uk/image-carousel-using-twitter-bootstrap-and-orchard-cms-projections

Upvotes: 0

Related Questions