Using Ditto on Nested Content with custom data models
I am trying to use ditto to map a list of items to a property on a document type using nested content. I don't want to use IPublishedContent in my PageModel so I can have strongly typed models to pass to the presentation layer.
The simple example I have created is a document type called Page, a property called TestList, which is of type nested content a list of items that are a document type called TestItem. TestItem is a simple testbox.
I have a similar structure in code that follows this pattern:
Page = class "PageModel", property "TestList" type "TestListModel"
TestList = class "TestModelList", property "Content" type "List
I have tried decorating everything with [UmbracoPicker], I tried using virtual IEnumerable
But no matter what i try I am getting this error
Unable to cast object of type '<CastIterator>d__94`1[ProjectName.TestItem]' to type 'System.Collections.Generic.List`1[ProjectName.TestItem]'.
It seems like a simple task, Ditto already converts IPublishedContent to custom models, nested content created a list of IPublishedContent, but I can't seem to get Ditto to convert a list of IPublishedContent into a list of Models.
Edit: Turns out all i needed was a night of sleep and walking through all the steps. I removed [UmbracoPicker] from the TestItem class and it worked. Thanks for taking a look at this for me though!
I'll keep everything below because it might help someone else realize they have unecessary [UmbracoPicker] attributes on their classes
This has gone through a few iterations so it looks a little different now, I got to the point where using the middle class TestModelList throws the same error as doing a direct IEnumerable
public class PageController : RenderMvcController
{
public override ActionResult Index(RenderModel model)
{
var test = model.As<PageModel>();
return base.Index(model);
}
}
//Document type class model that is used by nested content
//doc type alias = "testItem"
[UmbracoPicker]
public class TestItem
{
//property alias = "testProperty"
[UmbracoPicker]
public string TestProperty { get; set; }
}
//The "page" document type
public class PageModel
{
//property alias = "testList"
public IEnumerable<TestItem> TestList { get; set; }
}
The error I am getting is different now too. When I try to call test.TestList.Count() I get this error
Can't convert IPublishedContent to System.String as it has no valid constructor. A valid constructor is either an empty one, or one accepting a single IPublishedContent parameter.
Using Ditto on Nested Content with custom data models
I am trying to use ditto to map a list of items to a property on a document type using nested content. I don't want to use IPublishedContent in my PageModel so I can have strongly typed models to pass to the presentation layer.
The simple example I have created is a document type called Page, a property called TestList, which is of type nested content a list of items that are a document type called TestItem. TestItem is a simple testbox.
I have a similar structure in code that follows this pattern:
Page = class "PageModel", property "TestList" type "TestListModel" TestList = class "TestModelList", property "Content" type "List
I have tried decorating everything with [UmbracoPicker], I tried using virtual IEnumerable
But no matter what i try I am getting this error
It seems like a simple task, Ditto already converts IPublishedContent to custom models, nested content created a list of IPublishedContent, but I can't seem to get Ditto to convert a list of IPublishedContent into a list of Models.
Can anyone point me in the right direction?
Thanks, Chris
Hi Chris,
Would you be able to copy/paste in your
PageModel
class? (It'll give me a better understanding of the processors/attributes being used)At a complete guess, try changing
List<TestItem>
toIEnumerable<TestItem>
?Cheers,
- Lee
Edit: Turns out all i needed was a night of sleep and walking through all the steps. I removed [UmbracoPicker] from the TestItem class and it worked. Thanks for taking a look at this for me though!
I'll keep everything below because it might help someone else realize they have unecessary [UmbracoPicker] attributes on their classes
This has gone through a few iterations so it looks a little different now, I got to the point where using the middle class TestModelList throws the same error as doing a direct IEnumerable
The error I am getting is different now too. When I try to call test.TestList.Count() I get this error
Hi Chris,
Try removing the
[UmbracoPicker]
attributes, as they are only needed for content/media pickers.Cheers,
- Lee
is working on a reply...