webjaved
07/25/2023, 11:40 AMwebjaved
07/25/2023, 11:46 AM@{
// Access the homepage content
var homePage = Model.Content.Site().Root();
var multiUrlLinks = homePage.GetPropertyValue<IEnumerable<IPublishedElement>>("footerLink");
}
<nav>
<ul>
@foreach (var link in multiUrlLinks)
{
var url = link.GetPropertyValue<string>("url");
var target = link.GetPropertyValue<string>("target");
var text = link.GetPropertyValue<string>("text");
<li><a href="@url" target="@target">@text</a></li>
}
</ul>
</nav>
But it throws the following error;
System.Web.HttpCompileException: 'D:\sites\PrincipleNetworks.Web\Views\Partials\footerLinks.cshtml(7): error CS1061: 'IPublishedContent' does not contain a definition for 'Content' and no accessible extension method 'Content' accepting a first argument of type 'IPublishedContent' could be found (are you missing a using directive or an assembly reference?)'
webjaved
07/25/2023, 12:04 PM@using Umbraco.Web.Models
@inherits UmbracoViewPage
@{
var homePage = Model.AncestorOrSelf<Home>();
var footerLinks = homePage.Value<IEnumerable<IPublishedElement>>("footerLinks");
}
<nav>
<ul>
@foreach (var item in footerLinks)
{
var link = item.Value<Link>("link");
<li class="list-inline-item">
<a href="@link.Url" target="@link.Target">
Link title here.
</a>
</li>
}
</ul>
</nav>
> System.NullReferenceException: 'Object reference not set to an instance of an object.'
>
> footerLinks was null.Jemayn
07/25/2023, 12:12 PMvar footerLinks = homePage.Value<IEnumerable<IPublishedElement>>("footerLinks");
, from your screen shots it looks like the property is called "Footer link", which would automatically become the alias footerLink.
So you should start by double checking your alias, and maybe also consider switching to using modelsbuilder to avoid problems like this 🙂Jemayn
07/25/2023, 12:13 PMwebjaved
07/25/2023, 12:15 PM@using Umbraco.Web.Models
@inherits UmbracoViewPage
@{
var homePage = Model.AncestorOrSelf<Home>();
var footerLinks = homePage.Value<IEnumerable<IPublishedElement>>("footerLink");
}
<nav>
<ul>
@foreach (var item in footerLinks)
{
var url = item.Value<string>("url");
var target = item.Value<string>("target");
var text = item.Value<string>("text");
<li class="list-inline-item">
<a href="@url" target="@target">@text</a>
</li>
}
</ul>
</nav>
System.NullReferenceException: 'Object reference not set to an instance of an object.'
footerLinks was null.Jemayn
07/25/2023, 12:28 PMwebjaved
07/25/2023, 1:36 PMUmbraco.Web.PublishedModels.Home
2) footerLink is the correct alias of the property. I've changed it to footerLinkItem
to see if that makes a difference. https://prnt.sc/kdfQ_lyJJ4Gr
3) You are correct, it needs to be IPublishedContent as I'm no longer working with blocks. 🙂
I'm still getting the error. footerLinks was null.
@JemaynJemayn
07/25/2023, 1:39 PMwebjaved
07/25/2023, 1:50 PMSystem.Web.HttpCompileException: 'D:\sites\PrincipleNetworks.Web\Views\Partials\footerLinks.cshtml(13): error CS1579: foreach statement cannot operate on variables of type 'object' because 'object
webjaved
07/25/2023, 1:56 PMwebjaved
07/25/2023, 2:20 PMwebjaved
07/25/2023, 2:27 PMJemayn
07/25/2023, 2:29 PMwebjaved
07/25/2023, 2:34 PMwebjaved
07/25/2023, 2:34 PMwebjaved
07/25/2023, 2:35 PMJemayn
07/25/2023, 2:43 PMwebjaved
08/01/2023, 10:12 AMvar footerLinks = homePage.Value<IEnumerable<Link>>("footerLinkItem");
webjaved
08/01/2023, 10:45 AMSystem.Collections.Generic.List1[Umbraco.Web.Models.Link]
webjaved
08/01/2023, 10:51 AMJemayn
08/01/2023, 11:27 AMwebjaved
08/01/2023, 11:33 AMwebjaved
08/01/2023, 11:41 AM@if(homePage != null)
{
<p>Homepage is not null.</p>
}
And that is getting rendered.webjaved
08/01/2023, 11:43 AMwebjaved
08/01/2023, 12:00 PMJemayn
08/01/2023, 12:03 PMcsharp
var node = Umbraco.Content(nodeId);
var nodeUrl = node?.Url();
Jemayn
08/01/2023, 12:08 PMvar homePage = Model.AncestorOrSelf<Home>();
with:
csharp
var rootNodes = Umbraco.ContentAtRoot();
IPublishedContent homepage;
foreach (var rootNode in rootNodes)
{
var homeNode = rootNode.DescendantOfType(Home.ModelTypeAlias);
if(homeNode is null) continue;
homepage = homeNode;
}
Then it will loop through your root nodes and find the homepage then set it so you can use it no matter if it is an ancestor or not..
Depending on your node structure there may be better more performant ways to do this.webjaved
08/01/2023, 12:21 PM