---
title: "problem med meny"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/168760-problem-med-meny"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Vinnaren"
published: "2008-02-05T21:10:32.000Z"
updated: "2008-02-07T21:41:47.000Z"
replies: 16
views: 872
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/168760-problem-med-meny"
---

# problem med meny

## #1 — Vinnaren, 2008-02-05T21:10Z

Försöker göa en meny klass, men det vill inte redigt fungera.

har följande:

```
public class menus
{
    public ListItem HeadMenu { get; set; }
    public ListItem SubMenu { get; set; }

    public menus(String type)
	{
        AdminMenu();
	}

    public void AdminMenu()
    {
        ListItem menuItem = null;

        foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
        {
            if (node.Title == "Admin")
            {
                foreach (SiteMapNode node2 in node.ChildNodes)
                {
                    menuItem = new ListItem();
                    menuItem.Text = node2.Title;
                    menuItem.Value = node2.Url;

                    if (node2.Equals(SiteMap.CurrentNode))
                    {
                        menuItem.Attributes.Add("class", "current");
                        CreateSubMenu(node2);
                    }
                    HeadMenu = menuItem;
                }
            }
        }
    }

    protected void CreateSubMenu(SiteMapNode node)
    {
        ListItem menuItem = null;
        foreach (SiteMapNode node2 in node.ChildNodes)
        {
            menuItem = new ListItem();
            menuItem.Text = node2.Title;
            menuItem.Value = node2.Url;

            if (node2.Equals(SiteMap.CurrentNode))
            {
                menuItem.Attributes.Add("class", "currentsub");
            }
            SubMenu = menuItem;
        }
    }
}
```

 

```
    protected void Page_Load(object sender, EventArgs e)
    {
        menus m = new menus("");

        foreach (ListItem li in m.HeadMenu)
        {
            blHeadMenu.Items.Add(li);
        }

    }
```

 

Får felmeddelandet:
foreach statement cannot operate on variables of type 'System.Web.UI.WebControls.ListItem' because 'System.Web.UI.WebControls.ListItem' does not contain a public definition for 'GetEnumerator'

Finns det något annat kanske bättre sätt att lösa detta på?

Har en huvudmeny som jag sedan vill få ut alla undermenyer på.

Tacksam för all hjälp   :stud

Permalänk: https://www.webforum.nu/p/168760

## #2 — Josef, 2008-02-06T11:48Z

```
foreach (ListItem li in m.HeadMenu[b].Items[/b])
```

Permalänk: https://www.webforum.nu/p/2077869

## #3 — Vinnaren, 2008-02-06T17:15Z

tack, men får nu felmeddelandet:
System.Web.UI.WebControls.ListItem' does not contain a definition for 'Items' and no extension method 'Items' accepting a first argument of type 'System.Web.UI.WebControls.ListItem' could be found (are you missing a using directive or an assembly reference?)

på

```
        foreach (ListItem li in m.HeadMenu.Items)
```

 

  :stud

Permalänk: https://www.webforum.nu/p/2077961

## #4 — emission, 2008-02-06T18:06Z

1\. ListItem kan inte innehålla några "barn-Items"
2\. Vad ska du göra med dina Items? Var ska de hamna?

Permalänk: https://www.webforum.nu/p/2077975

## #5 — Vinnaren, 2008-02-06T19:34Z

ska ju anv ListItem för att fp en lista med olika menyallternativ.

Vet inte vilket sätt som är bäst  :stud

Permalänk: https://www.webforum.nu/p/2078044

## #6 — freguz, 2008-02-06T19:59Z

Du vill nog ha flera items istället för bara en:

```
public ListItem[] HeadMenu ;
public ListItem[] SubMenu;

//sen i loopandet
int i = 0;
foreach (SiteMapNode node2 in node.ChildNodes)
                {
                    menuItem = new ListItem();
                    menuItem.Text = node2.Title;
                    menuItem.Value = node2.Url;

                    if (node2.Equals(SiteMap.CurrentNode))
                    {
                        menuItem.Attributes.Add("class", "current");
                        CreateSubMenu(node2);
                    }
                    HeadMenu[i++] = menuItem;
                }
```

och samma tänk för submenu.

Otestat detta och mer av en idé hur man kan tänka...

Permalänk: https://www.webforum.nu/p/2078060

## #7 — Vinnaren, 2008-02-07T17:22Z

tack, hur gör man om jag nu vill loopa ut menyn på sidan?
Har provat med:

```
        foreach (ListItem[] li in m.HeadMenu)
        {
            blHeadMenu.Items.Add(li);
        }
```

 

Får felmeddelandet:
error CS0030: Cannot convert type 'System.Web.UI.WebControls.ListItem' to 'System.Web.UI.WebControls.ListItem\[\]'		
  :stud

Permalänk: https://www.webforum.nu/p/2078223

## #8 — freguz, 2008-02-07T17:23Z

```
        foreach (ListItem li in m.HeadMenu) // bara en item du ska ta
        {
            blHeadMenu.Items.Add(li);
        }
```

Permalänk: https://www.webforum.nu/p/2078224

## #9 — Vinnaren, 2008-02-07T18:12Z

ok, tack, får nu nytt felmeddelande:
Object reference not set to an instance of an object.

på:
HeadMenu\[i++\] = menuItem;

  :stud

Permalänk: https://www.webforum.nu/p/2078230

## #10 — freguz, 2008-02-07T18:27Z

Du måste initiera dom

```
//sen i loopandet
int i = 0;
HeadMenu[] = new ListItem[node.ChildNodes.Count]; // tror det finns en Count där
foreach(....)
```

Permalänk: https://www.webforum.nu/p/2078236

## #11 — Vinnaren, 2008-02-07T18:38Z

ok, tack, får nu felmeddelandet:
Identifier expected

på = i 

```
HeadMenu[] = new ListItem[node.ChildNodes.Count];
```

 

  :stud

Permalänk: https://www.webforum.nu/p/2078239

## #12 — freguz, 2008-02-07T19:13Z

på = i ?

jag måste nog se mera av koden

Permalänk: https://www.webforum.nu/p/2078246

## #13 — Vinnaren, 2008-02-07T19:18Z

mja, felet ligger enligt VS på **\=**

```
    public void Menu(String type)
    {
        ListItem menuItem = null;
        int i = 0;

        foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
        {
            if (node.Title == type)
            {
                HeadMenu[] = new ListItem[node.ChildNodes.Count]; 

                foreach (SiteMapNode node2 in node.ChildNodes)
                {
                    menuItem = new ListItem();
                    menuItem.Text = node2.Title;
                    menuItem.Value = node2.Url;

                    if (node2.Equals(SiteMap.CurrentNode))
                    {
                        menuItem.Attributes.Add("class", "current");
                        //CreateSubMenu(node2);
                    }
                    HeadMenu[i++] = menuItem;
                }
            }
        }
    }
```

 

  :stud

Permalänk: https://www.webforum.nu/p/2078248

## #14 — freguz, 2008-02-07T20:02Z

Vad sägs om att göra om funktionen att den returnerar en collection av listitems?

```

public ListItemCollection Menu(string type)
    {
        ListItem menuItem;
        ListItemCollection HeadMenu = new ListItemCollection();

        foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
        {
            if (node.Title == type)
            {
                foreach (SiteMapNode node2 in node.ChildNodes)
                {
                    menuItem = new ListItem();
                    menuItem.Text = node2.Title;
                    menuItem.Value = node2.Url;

                    if (node2.Equals(SiteMap.CurrentNode))
                    {
                        menuItem.Attributes.Add("class", "current");
                        //CreateSubMenu(node2);
                    }
                    HeadMenu.Add(menuItem);
                }
            }
        }
	return HeadMenu;
    }
```

Permalänk: https://www.webforum.nu/p/2078261

## #15 — Vinnaren, 2008-02-07T20:15Z

tack, fungerade kanon, men hur ska jag göra för att få ut undermenyn?

```
    protected void CreateSubMenu(SiteMapNode node)
    {
        ListItem menuItem = null;
        int i = 0;
        foreach (SiteMapNode node2 in node.ChildNodes)
        {
            menuItem = new ListItem();
            menuItem.Text = node2.Title;
            menuItem.Value = node2.Url;

            if (node2.Equals(SiteMap.CurrentNode))
            {
                menuItem.Attributes.Add("class", "currentsub");
            }
            SubMenu[i++] = menuItem;
        }
    }
```

 

Och hur kommer jag åt den från aspx sidan??

  :stud

Permalänk: https://www.webforum.nu/p/2078263

## #16 — emission, 2008-02-07T21:38Z

Beror inte undermenyn på vad man valt i huvudmenyn? I så fall är det ju inte läge att hämta den förrän man vet vilket val som gjorts där.

Du kanske kan beskriva lite mer ingående vad som ska hända, och var du ska stoppa in dina ListItems. DropDownList?

Permalänk: https://www.webforum.nu/p/2078300

## #17 — Vinnaren, 2008-02-07T21:41Z

ok, när man klickar på ett menyval kommer man då till en sida, på den sidan finns en till BulletedList. Så när sidan laddas ska både huvudmenyn och ev. undermenyn laddas och visas. O, undermenyn beror på vilken sida man är på.

Frågan är nu hur jag får ut undermenyn  :stud

Permalänk: https://www.webforum.nu/p/2078301

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/168760-problem-med-meny
