VinnarenMedlem sedan sep. 2005833 inlägg 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
JosefMedlem sedan mars 20023 561 inlägg foreach (ListItem li in m.HeadMenu[b].Items[/b])
VinnarenMedlem sedan sep. 2005833 inlägg 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
emissionMedlem sedan dec. 19996 721 inlägg 1. ListItem kan inte innehålla några "barn-Items"
2. Vad ska du göra med dina Items? Var ska de hamna?
VinnarenMedlem sedan sep. 2005833 inlägg ska ju anv ListItem för att fp en lista med olika menyallternativ.
Vet inte vilket sätt som är bäst :stud
freguzMedlem sedan feb. 2005280 inlägg 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...
VinnarenMedlem sedan sep. 2005833 inlägg 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
freguzMedlem sedan feb. 2005280 inlägg foreach (ListItem li in m.HeadMenu) // bara en item du ska ta
{
blHeadMenu.Items.Add(li);
}
VinnarenMedlem sedan sep. 2005833 inlägg ok, tack, får nu nytt felmeddelande:
Object reference not set to an instance of an object.
på:
HeadMenu[i++] = menuItem;
:stud
freguzMedlem sedan feb. 2005280 inlägg 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(....)
VinnarenMedlem sedan sep. 2005833 inlägg ok, tack, får nu felmeddelandet:
Identifier expected
på = i
HeadMenu[] = new ListItem[node.ChildNodes.Count];
:stud
freguzMedlem sedan feb. 2005280 inlägg på = i ?
jag måste nog se mera av koden
VinnarenMedlem sedan sep. 2005833 inlägg 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
freguzMedlem sedan feb. 2005280 inlägg 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;
}
VinnarenMedlem sedan sep. 2005833 inlägg 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
emissionMedlem sedan dec. 19996 721 inlägg 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?
VinnarenMedlem sedan sep. 2005833 inlägg 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