Solved

using sitemapdatasource to display list of links

Posted on 2006-07-19
4
1,052 Views
Last Modified: 2008-01-09
Is anyone familiar with the following method used to display a subset of items in the SiteMap to be rendered on a specific menu?

http://weblogs.asp.net/dneimke/archive/2005/03/29/396103.aspx

I have tried using this method in a myriad of different ways and cannot get this to work.  It seems straightforward, but I can't get it to work.

This is the current way I'm trying to get it to work:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopNavigationBar.ascx.cs" Inherits="UserControls_TopNavigationBar" %>
<asp:Repeater runat="server" ID="siteMapAsBulletedList" DataSourceID="SiteMapDataSource1" OnItemCommand="siteMapAsBulletedList_ItemCommand">
    <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" />

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_TopNavigationBar : System.Web.UI.UserControl
{

    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
   
    protected void siteMapAsBulletedList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        SiteMapNode node = e.Item.DataItem as SiteMapNode;
        string display = node["MenuLocation"];
        if (string.IsNullOrEmpty(display) || display != "top")
        {
            e.Item.Visible = false;
        }
    }
}

No errors, just doesn't display the subset of items from the sitemap I've specified.

Here is my sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/index.aspx" title="Home" MenuLocation="top">
    <siteMapNode url="~/about_us/index.aspx" title="About Us" MenuLocation="top">
      <siteMapNode url="~/about_us/mediaroom.aspx" title="Media Room" />
      <siteMapNode url="~/about_us/awards.aspx" title="Awards" />
      <siteMapNode url="~/about_us/employment.aspx" title="Employment Opportunities" />
      <siteMapNode url="~/about_us/events.aspx" title="Trade Show Calendar" />
      <siteMapNode url="~/about_us/partners.aspx" title="Partners and Alliances" />
      <siteMapNode url="~/about_us/wrcmedia.aspx" title="WRC Media" />
    </siteMapNode>
    <siteMapNode url="~/contact.aspx" title="Contact Us" MenuLocation="top" />
    <siteMapNode url="http://support.compasslearning.com" title="Customer Support" MenuLocation="top" />
    <siteMapNode url="~/sitemap.aspx" title="Site Map" MenuLocation="top" />
    <siteMapNode url="~/technology/index.aspx" title="Technology">
      <siteMapNode url="~/technology/subscription.aspx" title="Odyssey Subscription" />
      <siteMapNode url="~/technology/hosted.aspx" title="Odyssey Hosted" />
      <siteMapNode url="~/technology/enterprise.aspx" title="Odyssey Enterprise" />
    </siteMapNode>
      <siteMapNode url="~/research/index.aspx" title="Research" />
    <siteMapNode url="~/assessment/index.aspx" title="Assessment">
      <siteMapNode url="~/assessment/custom.aspx" title="Custom Assessment" />
      <siteMapNode url="~/assessment/explorer.aspx" title="CompassLearning Explorer" />
    </siteMapNode>
    <siteMapNode url="~/curriculum/index.aspx" title="Curriculum">
      <siteMapNode url="~/curriculum/prek.aspx" title="Pre-K" />
      <siteMapNode url="~/curriculum/reading.aspx" title="Reading/Language Arts" />
      <siteMapNode url="~/curriculum/writing.aspx" title="Writing" />
      <siteMapNode url="~/curriculum/math.aspx" title="Mathematics" />
      <siteMapNode url="~/curriculum/spanmath.aspx" title="Matemáticas" />
      <siteMapNode url="~/curriculum/science.aspx" title="Science" />
      <siteMapNode url="~/curriculum/socialstudies.aspx" title="Social Studies" />
      <siteMapNode url="~/curriculum/crosscurricular.aspx" title="Cross Curricular" />
      <siteMapNode url="~/curriculum/ell.aspx" title="English Language Learners" />
      <siteMapNode url="~/curriculum/specialneeds.aspx" title="Children with Spcial Needs" />
      <siteMapNode url="~/curriculum/secondary.aspx" title="Secondary" />
    </siteMapNode>
    <siteMapNode url="~/data_management/index.aspx" title="Data Management">
      <siteMapNode url="~/data_management/students.aspx" title="Managing Students" />
      <siteMapNode url="~/data_management/standards.aspx" title="Managing Standards" />
      <siteMapNode url="~/data_management/reporting.aspx" title="Managing Reporting" />
    </siteMapNode>
    <siteMapNode url="~/services/index.aspx" title="Services">
      <siteMapNode url="~/services/custservice.aspx" title="Customer Service" />
      <siteMapNode url="~/services/implementservice.aspx" title="Implementation Services" />
      <siteMapNode url="~/services/supportplan.aspx" title="Annual Support Plans" />
      <siteMapNode url="~/services/options.aspx" title="More Options" />
      <siteMapNode url="~/services/prodev.aspx" title="Professional Development" />
    </siteMapNode>
    <siteMapNode url="~/results/index.aspx" title="Results">
      <siteMapNode url="~/results/research.aspx" title="Product Research"  />
      <siteMapNode url="~/results/achievement.aspx" title="Achievement Results"  />
    </siteMapNode>
    </siteMapNode>
</siteMap>

Any help?
0
Comment
Question by:-Dman100-
  • 2
  • 2
4 Comments
 
LVL 6

Expert Comment

by:e1v
ID: 17144368
Move the code in your ItemCommand-event to the ItemCreated event of the repeater, and add a
if (node==null) return;
after
SiteMapNode node = e.Item.DataItem as SiteMapNode;

The ItemCommand event is for handling things like button-clicks inside your repeater, and it's not fired during creation of the repeater items.
0
 

Author Comment

by:-Dman100-
ID: 17146225
I received the following error:

No overload for 'siteMapAsBulletedList_ItemCreated' matches delegate 'System.Web.UI.WebControls.RepeaterItemEventHandler'

user control:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopNavigationBar.ascx.cs"
Inherits="UserControls_TopNavigationBar" %>
<asp:Repeater runat="server" ID="siteMapAsBulletedList" DataSourceID="SiteMapDataSource1" OnItemCreated="siteMapAsBulletedList_ItemCreated">
    <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.WebParts;
using System.Web.UI.HtmlControls;

public partial class UserControls_TopNavigationBar : System.Web.UI.UserControl
{

    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
   
    protected void siteMapAsBulletedList_ItemCreated(object source, RepeaterCommandEventArgs e)
    {
        SiteMapNode node = e.Item.DataItem as SiteMapNode;
        if (node == null) return;
        string display = node["MenuLocation"];
        if (string.IsNullOrEmpty(display) || display != "top")
        {
            e.Item.Visible = false;
        }
    }
}


Is this incorrect?

Thanks for your help
0
 
LVL 6

Accepted Solution

by:
e1v earned 500 total points
ID: 17146269
You must replace RepeaterCommandEventArgs with  RepeaterItemEventArgs

protected void siteMapAsBulletedList_ItemCreated(object source, RepeaterItemEventArgs e)
0
 

Author Comment

by:-Dman100-
ID: 17146677
Thank you e1v...I really appreciate your help with this.  That got it working.

I have been trying to figure out how to get that to work right for several days.

Thanks again!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
SignalR - getting new data from sql DB 5 79
ASP.NET e-commerce website 4 54
ASP:DataGrid and how to bind to a BoundColumn 8 37
What .NET URL re-routing tool did I use? 2 31
I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

930 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now