But the i keep getting the error "More than one type wants to be a model for content type content." when the "Builder.cs" file is included in the project, when i exclude them and build it works just fine :)
First port of call, check that the old DLL has been deleted (the one Models Builder generated).
Then, you need to update your views to use the new namespace. The API generates models in your own namespace not in the default ModelsBuilder namespace so all views need updated and the web.config in the Views folder :-)
Give those a go and let us know if you still have issues.
To use the API version, as I understand it, you have to have the site running in debug mode for the API to be available. So you'd have to automate a process that spins up the website and runs it, then runs the custom VS tool (or it's equivalent code) to extract the latest models. Then you can re-compile the assembly.
In theory, you should always have the latest code if you adjust your work process so that once you make any changes to doc types you run Models Builder custom tool again. That's probably your safer option.
I would say go down the API route as it allows you to take advantage of the fact the models are partial classes and so you can override and extend them if you need to, (combining properties for example).
I've managed to get into a point where I couldn't build a project because of DLL mode and my website and my Core project both wanting access to the models DLL, so have moved away from it since then.
If you aren't doing anything complicated and aren't having separate projects DLL mode can work nicely though.
Nik, I've been using the API Mode and I have my site running. But I went to make some changes where I have a Master, then a Home that runs as Body, then a partial for the newest post on the home page.
I'm running into an issue where the home model and the partial model seem to be clashing.
Cannot bind source content type ModelsBuilder.APIMode.Models.Home to model type ModelsBuilder.APIMode.Models.MyBlogPost.
I noticed you mention view webconfig needed to be changed. Could you elaborate please? I never saw anything about that when I set this up based on the 24 days in article
Do you want to spin up a new question on the forum for the binding issue you are getting? Happy to help though.
Regarding the Web.Config change in the View folder, you don't have to change it, but I do to make things easier. In there I add the new namespace that my models are being generated under so I don't have to include it in my view every time I want to access it.
By default the Web.Config contains a reference to (typing off the cuff so may not be 100%) Umbraco.Web.PublishedModels namespace, but we can remove this when using the API mode as our models don't exist there any more.
So in your example Models are generating under ModelsBuilder.APIMode.Models I'd add that namespace instead :-) It's just an ease thing rather than a requirement.
The reason for the fresh question is just so if other people come across the same issue they can find it :-) If you start the question now, I'll jump straight on it for you :-)
In the question can you post the line where you are calling your partial view :-)
Models Builder
Hi Our :)
I have used the models builder for a long time, just with the DLL mode :)
But then i read this article, https://24days.in/umbraco-cms/2016/getting-started-with-modelsbuilder/ and though the API mode was a better choise for me :)
But the i keep getting the error "More than one type wants to be a model for content type content." when the "Builder.cs" file is included in the project, when i exclude them and build it works just fine :)
Where do i make the mistake? :P
Hey Anders,
First port of call, check that the old DLL has been deleted (the one Models Builder generated).
Then, you need to update your views to use the new namespace. The API generates models in your own namespace not in the default ModelsBuilder namespace so all views need updated and the web.config in the Views folder :-)
Give those a go and let us know if you still have issues.
Nik
Oh yeah i should have told my self that i needed to delete the old one .. xD
Thanks alot now it works :)
Is there anyway to get the latest models on build or something like that? :)
Unfortunately not that I know of.
To use the API version, as I understand it, you have to have the site running in debug mode for the API to be available. So you'd have to automate a process that spins up the website and runs it, then runs the custom VS tool (or it's equivalent code) to extract the latest models. Then you can re-compile the assembly.
In theory, you should always have the latest code if you adjust your work process so that once you make any changes to doc types you run Models Builder custom tool again. That's probably your safer option.
Nik
Okay, thanks alot :)
I'm still trying to decide if we should use the API verison or DLL verison .. :)
Becuase with the DLL version we always had to rebuild models i guess we don't need that as long as we always have the latest models :)
I would say go down the API route as it allows you to take advantage of the fact the models are partial classes and so you can override and extend them if you need to, (combining properties for example).
I've managed to get into a point where I couldn't build a project because of DLL mode and my website and my Core project both wanting access to the models DLL, so have moved away from it since then.
If you aren't doing anything complicated and aren't having separate projects DLL mode can work nicely though.
Nice thanks alot :)
We do have seperate projects so maybe it's an good idea to use API mode :)
Nik, I've been using the API Mode and I have my site running. But I went to make some changes where I have a Master, then a Home that runs as Body, then a partial for the newest post on the home page.
I'm running into an issue where the home model and the partial model seem to be clashing.
Cannot bind source content type ModelsBuilder.APIMode.Models.Home to model type ModelsBuilder.APIMode.Models.MyBlogPost.
I noticed you mention view webconfig needed to be changed. Could you elaborate please? I never saw anything about that when I set this up based on the 24 days in article
Hi Madison,
Do you want to spin up a new question on the forum for the binding issue you are getting? Happy to help though.
Regarding the Web.Config change in the View folder, you don't have to change it, but I do to make things easier. In there I add the new namespace that my models are being generated under so I don't have to include it in my view every time I want to access it.
By default the Web.Config contains a reference to (typing off the cuff so may not be 100%) Umbraco.Web.PublishedModels namespace, but we can remove this when using the API mode as our models don't exist there any more.
So in your example Models are generating under ModelsBuilder.APIMode.Models I'd add that namespace instead :-) It's just an ease thing rather than a requirement.
Nik
Thank you, When I looked at the config file I thought that was probably the case but wasn't sure.
If I don't get this figured out pretty shortly I may start a separate question.
I should have stated that this is 7.10.4 and I'm trying to do everything strongly typed. the problem started when I added the model to the partial.
If you prefer I can start a different question.
Thanks again
Hi Madison,
The reason for the fresh question is just so if other people come across the same issue they can find it :-) If you start the question now, I'll jump straight on it for you :-)
In the question can you post the line where you are calling your partial view :-)
Nik
Nik, thanks again I posted the question
Cannot bind source content type ModelsBuilder.APIMode.Models.Home to model type ModelsBuilder.APIMode.Models.MyBlogPost
is working on a reply...