2014-11-06 30 views
9

Mam problem z utworzeniem podmenu na mojej stronieasp.net cms podmenu strona nie działa

mam 2 tabele bazy danych: MSSQL

WWW

  • WWW_ID
  • CAT_ID -> FK Do kategorii
  • WWW_NAME

Kategorie

  • CAT_ID
  • CAT_NAME
  • CAT_SORTORDER

mój foreach

sb.Append("<ul class=\"Menu\">"); 
    foreach (WWW item in WWW.Fetch(null, null, null)) 
    { 
     if (item.Active) 
     { 
      //All pages that doesnt have a categorie 
      if (!item.Categorie.ID.HasValue) 
      { 
       sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Name, item.ID.ToString()); 
      } 
      //All pages that have a categorie 
      if (item.Categorie.ID.HasValue) 
      { 
       //Split different categories. 
       if (CAT != item.Categorie.Name) 
       { 
        CAT = item.Categorie.Name; 
        sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Categorie.Name, item.ID.ToString()); 
       } 
      } 
     } 
     CAT = ""; 
    } 
    sb.Append("</ul>"); 

Zgubiłem się, gdy potrzebuję stworzyć początek UL i zamknięcie UL i kiedy muszę zresetować mój String CAT. Dzięki

+0

ugh @ spacje mnie nienawidzi spacje! – JonH

+2

po html renderowanym dla tego kodu –

+0

Czy chcesz utworzyć podmenu wewnątrz jednego węzła, jeśli zawiera on jakąś kategorię? –

Odpowiedz

0

Nie jestem do końca pewien, jaka jest struktura twojego menu, ponieważ nie masz dobrego przykładu. Jeśli jednak robisz coś takiego:

<ul> 
    <li>Category</li> 
    <li>Catefory 
     <ul> 
      <li>Page</li> 
     </ul> 
    </li> 
<\ul> 

następnie trzeba będzie zrobić coś takiego:

sb.Append("<ul class=\"Menu\">"); 
foreach (Categories category in Categories.Fetch(null, null, null)) 
{ 
    if (category.Active) 
    { 
     sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a>", category.Name, category.ID.ToString()); 
     var pages = WWW.Fetch(p => p.Categorie.ID.Equals(category.ID)); 
     if(pages.Any()) { 
      sb.Append("<ul>"); 
      foreach(WWW page in pages) { 
       sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", page.Name, page.ID.ToString()); 
      } 
      sb.Append("</ul>"); 
     } 
     sb.Append("</li>"); 
    } 
} 
sb.Append("</ul>"); 

ja sobie z tego nie jest dokładna do potrzeb najbardziej prawdopodobne, ale powinno być to całkiem dobry przykład logiki za menu. Jeśli możesz podać trochę więcej szczegółów na temat tego, w jaki sposób kategorie i tabele WWW reprezentują dane, a także przykład zamierzonego wyniku, jestem pewien, że mogę dołączyć bardziej konkretny przykład.

+0

Co zrobić, jeśli moje kategorie są puste, ponieważ nie mam stron WWW, więc nie tego chcesz? –

+0

Powyższe użycie było tylko przykładem sposobu zagnieżdżonego menu. (koncepcja wewnętrznej pętli do iteracji nad "Children" elementu menu.) Nie jestem pewien, co struktura twojej tablicy ma reprezentować, więc po prostu wziąłem na przykład ukłucie. Jeśli mógłbyś pokazać przykład wyglądu menu (w HTML), a także wyjaśnić, jak tabele odnoszą się do tego wyjścia HTML, mogę zrobić przykład przetwarzania kodu, aby pokazać, jak to będzie działać w konkretnej sytuacji. – rasicoc

0

Tylko funkcję i umieścić powyższy kod w tej funkcji i nazwać rekurencyjnie gdy pozycja zawiera kategoria ceni coś takiego:

public void NestedMenuCalling(List<Categorie> WWW) 
    { 
     sb.Append("<ul class=\"Menu\">"); 
     foreach (WWW item in WWW.Fetch(null, null, null)) 
     { 
      if (item.Active) 
      { 
       //All pages that doesnt have a categorie 
       if (!item.Categorie.ID.HasValue) 
       { 
        sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Name, item.ID.ToString()); 
       } 
       //All pages that have a categorie 
       if (item.Categorie.ID.HasValue) 
       { 
        //Split different categories. 
        if (CAT != item.Categorie.Name) 
        { 
         CAT = item.Categorie.Name; 
         NestedMenuCalling(item.Categorie); 
        } 
       } 
      } 
      CAT = ""; 
     } 
     sb.Append("</ul>"); 
    }