-Dman100-
asked on
conditionally display sitemap node
I have a user control that displays navigation links from the sitemap file:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopNavigationBar .ascx.cs" Inherits="UserControls_Top Navigation Bar" %>
<asp:Repeater runat="server" ID="siteMapAsBulletedList" DataSourceID="SiteMapDataS ource1">
<HeaderTemplate>
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome" NavigateUrl='<%# SiteMap.RootNode.Url %>' Text='<%# SiteMap.RootNode.Title %>'></asp:HyperLink></li>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>'></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:SiteMapDataSource ShowStartingNode="false" ID="SiteMapDataSource1" runat="server" />
In my code behind, I want to conditionally display specific nodes:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls. WebParts;
using System.Web.UI.HtmlControls ;
public partial class UserControls_TopNavigation Bar : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
SiteMapNode node = e.Item.DataItem as SiteMapNode ;
string display = node["DisplayOnLeft"];
if( string.IsEmptyOrNull( display ) || display != "true" ) {
e.Item.Visible = false ;
}
}
I recieved the following errors:
'System.EventArgs' does not contain a definition for 'Item'
'string' does not contain a definition for 'IsEmptyOrNull'
'System.EventArgs' does not contain a definition for 'Item'
Any help is appreciated.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopNavigationBar
<asp:Repeater runat="server" ID="siteMapAsBulletedList"
<HeaderTemplate>
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome" NavigateUrl='<%# SiteMap.RootNode.Url %>' Text='<%# SiteMap.RootNode.Title %>'></asp:HyperLink></li>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>'></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:SiteMapDataSource ShowStartingNode="false" ID="SiteMapDataSource1" runat="server" />
In my code behind, I want to conditionally display specific nodes:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.
using System.Web.UI.HtmlControls
public partial class UserControls_TopNavigation
{
protected void Page_Load(object sender, EventArgs e)
{
SiteMapNode node = e.Item.DataItem as SiteMapNode ;
string display = node["DisplayOnLeft"];
if( string.IsEmptyOrNull( display ) || display != "true" ) {
e.Item.Visible = false ;
}
}
I recieved the following errors:
'System.EventArgs' does not contain a definition for 'Item'
'string' does not contain a definition for 'IsEmptyOrNull'
'System.EventArgs' does not contain a definition for 'Item'
Any help is appreciated.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I changed to ItemCreated event to:
protected void Repeater1_ItemCreated(Obje ct Sender, RepeaterItemEventArgs e)
{
SiteMapNode node = e.Item.DataItem as SiteMapNode ;
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp lay) || display != "true")
{
e.Item.Visible = false;
}
}
this eliminated the protection level error, but I received the following error: 'NullReferenceException was unhandled by usercode'
This occurred on the following line:
string display = node["DisplayOnLeft"];
protected void Repeater1_ItemCreated(Obje
{
SiteMapNode node = e.Item.DataItem as SiteMapNode ;
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp
{
e.Item.Visible = false;
}
}
this eliminated the protection level error, but I received the following error: 'NullReferenceException was unhandled by usercode'
This occurred on the following line:
string display = node["DisplayOnLeft"];
ASKER
This got it...
protected void Repeater1_ItemCreated(Obje ct Sender, RepeaterItemEventArgs e)
{
SiteMapNode node = e.Item.DataItem as SiteMapNode;
if (node!=null)
{
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp lay) || display != "true")
{
e.Item.Visible = false;
}
}
}
protected void Repeater1_ItemCreated(Obje
{
SiteMapNode node = e.Item.DataItem as SiteMapNode;
if (node!=null)
{
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp
{
e.Item.Visible = false;
}
}
}
ASKER
How would I create an object instance for 'node' so it isn't null when accessed in the following code:
Code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls. WebParts;
using System.Web.UI.HtmlControls ;
public partial class UserControls_TopNavigation Bar : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Repeater1_ItemCreated(Obje ct Sender, RepeaterItemEventArgs e)
{
SiteMapNode node = e.Item.DataItem as SiteMapNode;
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp lay) || display != "true")
{
e.Item.Visible = false;
}
}
}
I believe I need to create an object instance for node?
Code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.
using System.Web.UI.HtmlControls
public partial class UserControls_TopNavigation
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Repeater1_ItemCreated(Obje
{
SiteMapNode node = e.Item.DataItem as SiteMapNode;
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp
{
e.Item.Visible = false;
}
}
}
I believe I need to create an object instance for node?
ASKER
user control:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopNavigationBar
<asp:Repeater runat="server" ID="siteMapAsBulletedList"
<HeaderTemplate>
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome" NavigateUrl='<%# SiteMap.RootNode.Url %>' Text='<%# SiteMap.RootNode.Title %>'></asp:HyperLink></li>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>'></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:SiteMapDataSource ShowStartingNode="false" ID="SiteMapDataSource1" runat="server" />
code-behind:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.
using System.Web.UI.HtmlControls
public partial class UserControls_TopNavigation
{
protected void Page_Load(object sender, EventArgs e)
{
}
void Repeater1_ItemCreated(Obje
{
SiteMapNode node = e.Item.DataItem as SiteMapNode ;
string display = node["DisplayOnLeft"];
if (string.IsNullOrEmpty(disp
{
e.Item.Visible = false;
}
}
}
I received the following error when I ran the page:
'UserControls_TopNavigatio
Do I need to change the access modifier?