Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    253

    Menu in asp.net con MasterPage

    Ciao ragazzi,
    buon giovedì a tutti!
    Vi chiedo un aiuto.
    Utilizzo le MasterPage in aspx e per importare il menu ho utilizzato un usercontrol.

    menu.ascx

    in menu.ascx.cs

    ho creato un enum dove elenco tutte le voci di menu
    e poi al caricamento della pagina quando c'è l'attributo nel css selected
    allora applica lo stile che ho creato alla voce selezionata :

    codice:
        case eMenu.Home:
                    sezione_azienda.Attributes.Add("class", "Selected");
                    break;
    dove Selected è la classe regolata nel css.

    ad oggi mi trovo in difficioltà perchè il bottone selezionato ha gli angoli arrotondati,
    di conseguenza ho 3 classi in ballo che mi regolano questo e essendo che avviene tutto dinamicamente non riesco a comunicarlo con un unico a.Selected , voi cosa mi suggerite?
    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    di postare nella sezione css?

    be cmq apparte tutto non capisco quale sia il problema nel senso che partendo da un selettore ad esempio nel tuo caso "Selected" puoi definire le altre regole in modo relativo a questo selettore ad esempio

    #Selected{ regole...}
    #Selected a{regole}

    etc etc...

    in questo modo specificando nell'html solo il selettore Selected tutte le altre regole verrano applicate automaticamente

    spero di aver capito bene il tuo problema

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    253
    caspita scusa ho sbagliato sezione...

    l'ho inserita qui perchè avviene tutto dinamicamente.
    e volevo sapere se era possibile tramite il case che ho fatto

    case eMenu.nomelink:
    sezione_nomelink. Attributes.Add("class", "Selected");

    passare anzichè un solo attributo Selected ma ad esempio due div
    in modo tale che ottengo per quella voce specifica lo stile dei due div
    ossia:
    <div> </div>
    nomelink
    <div></div>

    che mi regola lo stile del bottone...

  4. #4
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Beh bisogna vedere come hai costruito questo menu , voglio dire che se ad esempio utilizzi il webcontrol repeater ("ottimo per un semplice ripetizione di codice html") puoi, sfruttando l'evento OnItemDataBound, accedere a tutti gli elementi del sigolo menu e fare cose del tipo

    codice:
    if(Condizione)
    ((HtmlControl)e.Item.FindControl("MioDiv1")).Visible = true;
    ((HtmlControl)e.Item.FindControl("MioDiv2")).Visible = true;
    else
    ((HtmlControl)e.Item.FindControl("MioDiv1")).Visible = false;
    ((HtmlControl)e.Item.FindControl("MioDiv2")).Visible = false;
    ma dipende molto da cosa utilizzi per determinare la struttura html del menu

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    253
    Ciao Gabbone!
    Grazie per la risposta!
    Si forse è quello che fa al caso mio.
    Ti spiego bene quello che ho fatto ma forse lo devo cambiare rispetto a quello che voglio ottenere...

    in pratica ho fatto unb menu.ascx
    dove ci sono tutte le voci di menu
    con la seguente testata

    codice:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="menu.ascx.cs" Inherits="menu" %>
    
    voci di menu con il suo stile
    poi ho menu.ascx.cs
    dove ho

    codice:
        public enum eMenu
        {
    nomelink1,
    nomelink2
    ...
        }
    
        public eMenu Menu { get; set; }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (Menu)
            {
                case eMenu.nomelink1:
                    sezione_nomelink1.Attributes.Add("class", "Selected");
                    break;
    ...
    forse posso evitare .Attributes.Add("class", "Selected");
    e fare il controllo che mi hai suggerito tu?
    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    allora diciamo che il tuo repeater all'interno dello user control sia questo

    codice:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
    
            <asp:Repeater ID="MenuRepeater" runat="server" onitemdatabound="MenuRepeater_ItemDataBound">
                <HeaderTemplate>
                    <div class="ContenitoreDiv">
                </HeaderTemplate>
                <ItemTemplate>
                    <div runat="server" id="ContenitoreVoce" style="margin:5px 0px;">
                        <asp:HyperLink ID="VoceMenuHyperLink" NavigateUrl='<%#Eval("Link")%>' Text='<%#Eval("Testo")%>' runat="server"></asp:HyperLink>
                    </div>
                </ItemTemplate>
                <FooterTemplate>
                    </div></FooterTemplate>
            </asp:Repeater>
    come vedi per ogni elemento stampa un div con dentro un link.
    Nel WebUserControl.ascx.cs invece avrai
    codice:
    public partial class WebUserControl : System.Web.UI.UserControl
    {
        private eMenu _SelectedMenu;
        
        public eMenu SelectedMenu {//Server per impostare il link corrente
            get { return _SelectedMenu; }
            set
            {
                _SelectedMenu = value;
                List<VoceMenu> menu = new List<VoceMenu>();
                menu.Add( new VoceMenu { Testo="Primo" , Link="http://www.html.it" , voce = eMenu.nomelink1});
                menu.Add(new VoceMenu { Testo = "Secondo", Link = "http://www.html.it", voce = eMenu.nomelink2 });
                menu.Add(new VoceMenu { Testo = "Terzo", Link = "http://www.html.it", voce = eMenu.nomelink3 });
                
                MenuRepeater.DataSource = menu;
                MenuRepeater.DataBind();
                
            }
        }
        
        
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }
        protected void MenuRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            VoceMenu VoceMenu = (VoceMenu)e.Item.DataItem;
            if (VoceMenu != null && VoceMenu.voce == this.SelectedMenu)
            {
                ((HyperLink)e.Item.FindControl("VoceMenuHyperLink")).ForeColor = System.Drawing.Color.Red;
                   
            }
        }
    }
    
    public enum eMenu
    { nomelink1, nomelink2, nomelink3 }
    
    public class VoceMenu
    {
        public string Testo { get; set; }
        public string Link { get; set; }
        public eMenu voce;
    }
    La classe VoceMenu ti serve come aggregatore di informazioni relative ad un singolo elemento del menu (Il repeater legge le proprieta testo e link per binadarle nel codice html).
    Nel OnItemDataBaund del repeater invece viene controllato se l'oggetto che è stato bindato è quello selezionato ed in tal caso puoi prendere qualsiasi oggetto presente al suo interno e modificarlo (attenzione al cast) ... io ho cambiato il colore del link ma puoi fare quello che vuoi

    OKK pronti ad utilizzare la componente

    Default.aspx
    codice:
    ...
    <%@ Register TagPrefix="MyCtrl" TagName="Menu" Src="~/WebUserControl.ascx" %>
    ...
    <body>
        <form id="form1" runat="server">
        <div>
             <MyCtrl:Menu runat="server" SelectedMenu="nomelink2" id="Menu"></MyCtrl:Menu>
        </div>
        </form>
    </body>
    come vedi per selezionare il link corrente ti basta cambiare la proprietà SelectedMenu del tag <MyCtrl:Menu ...>


    dimmi cosa ne pensi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.