2011-05-22 4 views
0

J'espère que vous pouvez m'aider. Tout d'abord, je voudrais vous dire que je suis un mec d'application de bureau, ce qui signifie que je développe principalement mes applications dans le bureau. Maintenant, j'essaye de construire une application web mais cela m'amène à ne pas être sûr de la confusion ou juste de le faire mal.asp.net construit runtime Menu avec lien hors site

J'ai un code ici que remplit un menu à l'exécution. Runtime, car les éléments de menu sont remplis au code et les éléments sont récupérés dans la base de données.

est ici le code derrière:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     Menus menu = new Menus(); 
     imgMainLogo.ImageUrl = VARIABLES.MainLogoImage; 
     menu.PopulateMenuControl(ref mainmenu, 2); 
     menu.PopulateMenuControl(ref footermenu, 9); 
    } 
    else 
    { 
     System.Diagnostics.Debug.WriteLine("link: " + footermenu.SelectedValue); 
     if (footermenu.SelectedValue != null) 
     { 
      Response.Redirect(footermenu.SelectedValue, true); 
     } 
    } 
} 

et le code dans PopulateMenuControl

public void PopulateMenuControl(ref Menu menucontrol, int menuparentid) 
{ 
    //menucontrol.Items.Clear(); 

    foreach (MenuFields mf in GetMenusByParentID(menuparentid)) 
    { 
     MenuItem menuitem = new MenuItem(mf.MenuName, ReplaceSystemNameLink(mf.Link)); 
     menucontrol.Items.Add(menuitem); 

     foreach (MenuFields cmf in GetMenusByParentID(mf.MenuID)) 
     { 
      MenuItem childmenuitem = new MenuItem(cmf.MenuName, ReplaceSystemNameLink(cmf.Link)); 
      menuitem.ChildItems.Add(childmenuitem); 
     } 
    } 
} 

Alors Page.IsPostBack est la chose de base que je devrais apprendre quand faire quelque chose dans une page. Mais le problème ici est, un de mon menu dans "footermenu" a un lien hors site, et il devrait rediriger la page dans mon blog .. mais ce qui se passe était, footermenu.SelectedValue est vide une fois que j'ai cliqué sur le lien "Blog".

Que se passe-t-il?


MISE À JOUR

J'ai mis à jour le code toujours bloqué, le SelectedValue est encore vide

 
protected void Page_Load(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("Page_Load IsPostBack: " + Page.IsPostBack.ToString()); 
    if (Page.IsPostBack) 
    { 
     if(footermenu.SelectedValue != null) 
     { 
      System.Diagnostics.Debug.WriteLine("link: " + footermenu.SelectedValue); 
     } 
    } 
} 

protected void Page_Init(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("Page_Init IsPostBack: " + Page.IsPostBack.ToString()); 
    if (!Page.IsPostBack) 
    { 
     Menus menu = new Menus(); 
     imgMainLogo.ImageUrl = VARIABLES.MainLogoImage; 
     menu.PopulateMenuControl(ref mainmenu, 2); 
     menu.PopulateMenuControl(ref footermenu, 9); 
    } 
} 
+0

Je l'ai eu en utilisant "Page_PreRender" – jaysonragasa

Répondre

1

Vous devez apprendre davantage sur le page lifecycle. Avec les contrôles dynamiques (créés et ajoutés dans le code), vous devez les recréer à chaque chargement de page. Cela est préférable dans le gestionnaire d'événements init

+0

Merci. Je vais essayer de revenir ici – jaysonragasa

+0

Oded. J'ai mis à jour la question. Ce que je veux dire, c'est remplir le menu à l'exécution. – jaysonragasa

+0

@ Nullstr1ng - C'est bien, je l'ai compris. Ma réponse concerne exactement le problème que vous avez. – Oded

Questions connexes