---
title: "Enkel navigation bar?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/97640-enkel-navigation-bar"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "anbj"
published: "2004-02-18T13:05:35.000Z"
updated: "2004-02-19T15:34:03.000Z"
replies: 9
views: 350
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/97640-enkel-navigation-bar"
---

# Enkel navigation bar?

## #1 — anbj, 2004-02-18T13:05Z

Jag sitter och försöker göra en enkel meny i form av en horizontell bar där det meny alternativ man har klickat på får en annan bakgrundsfärg än övriga. Menyn byggs upp av en databas och anpassas efter användarens profil. I klassisk ASP hade jag antagligen bara skickat med ett id på det menyalternativ jag klickar på och sedan matchat det mot databasens för att sedan sätta en annan bakgrundsfärg. Men hur gör man detta utan spaggetikod eller finns det rent av något smartare sätt att åstakomma samma sak i ASP.net?

Några idéer?

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

## #2 — NETwork, 2004-02-18T13:56Z

Finns många sätt att göra det på. En enkel lösning, lägg menyn i en usercontrol med några panels. Så skapar du en publik variabel "Selected" i din usercontrol och sätter den på respektive sida som inkluderar menyn. Sedan använder du den variabeln för att sätta bakgrundsfärgen.

```
//aspx
<uc:MyMenu id="Menu1" Selected="1" runat="server"></uc:MyMenu>

//pseudokod
public int Selected;

swich (Selected)
{
case 1:
  Panel.BackColor = Color.Blue;
  Break;
}
```

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

## #3 — Vimp, 2004-02-18T14:07Z

Inte så här då NETwork? :P

```
<uc:MyMenu id="Menu1" Selected="1" runat="server"></uc:MyMenu>
```

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

## #4 — NETwork, 2004-02-18T14:25Z

Haha, jo naturligtvis, en misslyckad copy&paste kallas det för! :) Tack för rättelsen (mitt inlägg ovan redigerat)

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

## #5 — anbj, 2004-02-19T07:47Z

Ska genast testa detta! :-)

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

## #6 — anbj, 2004-02-19T07:58Z

Hmm, problemet är ju att jag har olika många menyalternativ för olika användare eftersom menyn genereras från databasen. Jag skulle vilja att menyn fungerar oavsett hur många eller vilka menalternativ som ska visas... I ditt förslag behöver jag ju ha med alla menyalternativ i case satsen plus att jag måste ändra i den koden om jag skulle lägga till ett menyalternativ i databasen.

Kan man göra det mer dynamiskt??

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

## #7 — NETwork, 2004-02-19T13:28Z

Visst, inga problem. Använd en **repeater**! Hämta dina menydata (vilka menydata som ska hämtas till den specifika användaren fixar du antagligen redan i sql-satsen), lägg datan i en collection av något slag (exempelvis en datatable) och ha den som datakälla till repeatern. Sedan är det bara att loopa ut dina data på valfritt sätt hur du nu vill att det ska se ut. Om du aldrig fyllt en repeater tidigare så finns det många trådar om hur det går till (och man kan göra på flera olika sätt).

```
<table>
  <tr>
    <asp:Repeater id="Repeater1" runat="server">
      <ItemTemplate>
        <td><asp:LinkButton ID="myLink" Runat="server"></asp:LinkButton></td>  
      </ItemTemplate>
    </asp:Repeater>
  </tr>
</table>
```

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

## #8 — anbj, 2004-02-19T13:40Z

Ja, jag började med att använda en repeater, men sedan stötte jag på patrull när jag skulle markera den valda menyalternativet med en annan bakgrundsfärg. Jag hittar inget sätt att säga att en viss TD i repeatern ska ha en annan bakgrund beroende på en variabel så att säga...

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

## #9 — NETwork, 2004-02-19T14:42Z

Finns som alltid många sätt att lösa det på. Ett förslag: 

Har du någon nyckel på dina menynoder? Alltså ett id som är unikt för varje nod (länk)? Om inte, lägg till ett sådant och hämta
nyckeln tillsammans med övriga data i din collection som fyller din repeater. Om du nu använder en linkbutton så finns det ett attribut som heter **CommandName** där du kan lägga nyckeln. När du sedan trycker på en länk så fångar du upp 
ditt commandname och sparar det exempelvis i en kaka eller session. Därefter fyller du din repeater som vanligt. 

En repeater har ett event som heter ItemDataBound - det körs för varje rad i din repeater när den fylls upp, en slags loop helt enkelt som du kan (ska) använda till mycket. Här kan du nu enkelt gå igenom varje länk och jämföra den med ditt sparade commandname med det commandname som finns i alla dina linkbuttons. När dessa är samma så är du i rätt rad och då är det bara att leta upp din td (du kan använda en vanlig td som en serverkontrol om du vill, se exemplet nedan) eller vad du nu ska sätta bakgrundsfärgen på. Nåt i den här stilen (lite pseudokod som vanligt):

```
//din repeater
<table>
  <tr>
    <asp:repeater id="Repeater1" runat="server">
      <ItemTemplate>
        [b]<td id="myTD" runat="server">[/b]
          <asp:linkbutton CommandName='<%# nyckel %>' id="myLB" Runat="server"></asp:linkbutton>
        </td>
      </ItemTemplate>
    </asp:repeater>
  </tr>
</table>

// här fångar du upp ditt commandname
protected void myLB_Click(object sender, System.EventArgs e) {
  Session["Selected"] = ((LinkButton)sender).CommandName;
  //hämta dina menydata och bind om kontrollen:
  BindRepeater();
}

// sedan kör du itemdatabound på din repeater
// där du letar upp den valda noden 
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) {
  if(((LinkButton)e.Item.FindControl("myLB")).CommandName == Session["Selected"].ToString())
    [b]((HtmlTableCell)e.Item.FindControl("myTD")).BgColor = Color.Blue;[/b]
}
```

Nåt sånt. Någon annan kanske har en snyggare lösning?

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

## #10 — anbj, 2004-02-19T15:34Z

Tack för tipset. Jag måste erkänna att jag gav upp och körde old school asp för att lösa saken. Men din variant borde funka, får se om jag orkar testa imorgon :-)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/97640-enkel-navigation-bar
