2014-11-06 16 views
9

Ho un problema di creare un sottomenu sul mio sitoasp.net cms sottomenu non funziona

Ho 2 tabelle di database MSSQL:

WWW

  • WWW_ID
  • CAT_ID -> FK alle categorie
  • WWW_NAME

Categorie

  • cat_id
  • CAT_NAME
  • CAT_SORTORDER

mia 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>"); 

Ho perso dove ho bisogno di creare l'UL di inizio e di chiudere UL e dove quando ho bisogno di ripristinare il mio CAT String. Grazie

+0

ugh @ spazi me, odia gli spazi bianchi! – JonH

+2

pubblica il codice html visualizzato per questo codice –

+0

Vuoi dire che vuoi creare un sottomenu all'interno di un nodo se contiene una categoria? –

risposta

0

Non sono esattamente sicuro di quale sia la struttura del menu poiché non si dispone di un buon esempio. Se invece si sta facendo qualcosa di simile:

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

allora si avrà bisogno di fare qualcosa di simile:

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>"); 

Mi rendo conto che questo non è esatto alle vostre esigenze più probabile, ma dovrebbe essere una buona esempio della logica dietro un menu. Se riesci a inserire un po 'più di dettagli sul modo in cui le categorie e le tabelle WWW rappresentano i dati e anche un esempio del tuo output previsto, sono sicuro di poter aggiungere un esempio più specifico.

+0

Cosa succede se le mie categorie sono vuote di non avere pagine WWW quindi non è quello che vuoi ?? –

+0

L'uso sopra era solo un esempio di come fare i menu annidati. (il concetto di un loop interno per scorrere i "Bambini" di una voce di menu). Non sono sicuro di quale dovrebbe essere la struttura della tabella per rappresentare, quindi ho appena preso a pugni un esempio. Se potessi mostrare un esempio di come apparirà il menu (in html) e spiegare come le tabelle si riferiscono a quell'output html, posso fare un esempio di codice di elaborazione per mostrare come funzionerebbe in modo specifico nella tua situazione. – rasicoc

0

Basta fare una funzione e mettere il codice di cui sopra in quella funzione e lo chiamano in modo ricorsivo quando l'articolo contiene categoria Valori qualcosa di simile:

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>"); 
    } 
Problemi correlati