+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [asp.net 2.0] associare css al click di un pulsante

  1. #1
    1sirena non è in linea Scolaretto
    Post
    77

    [asp.net 2.0] associare css al click di un pulsante

    Ciao a tutti!
    Ho un problema!! vorrei poter associare al click di un bottone css diversi, in modo da poter cambiare la grandezza del testo, il background,... e rendere, insomma, il sito accessibile a più tipologie d'utenti. Come è stato realizzato, ad esempio, in questo sito: http://www.comune.moladibari.ba.it/


    Come posso fare? Qlc ha qualche consiglio, manuale,....


  2. #2
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    Ci sono diversi modi per fare quello che chiedi. Come prima cosa mi sembra importante indicarti che con Asp.Net 2.0 sono state introdotte due belle novità(fra le tante) i temi e gli skin.
    Gli skin se vuoi puoi considerarli come un foglio css a tutti gli effetti e possono essere applicati ad un singolo controllo oppure se preferisci ad un insieme di controlli.
    I temi invece non sono altro che un insieme di skin e devono essere applicati a livello di pagina. Un punto per iniziare a studiare questi concetti:
    http://aspnet.html.it/guide/lezione/2712/temi-e-skin/
    Inoltre sul web trovi tantissimi articoli/codice.
    Questa secondo me è la soluzione più pulita, ma se vuoi puoi anche avere n fogli di stile e richiamarli a runtime al click del pulsante:
    codice:
    HtmlLink cssPage = new HtmlLink();
    cssPage.Href = "stile1.css";
    cssPage.Attributes.Add("rel", "Stylesheet");
    cssPage.Attributes.Add("type", @"text/css");
    Page.Header.Controls.Add( cssPage);
    Ovviamente l'informazione dello stile corrente(in questo caso "stile1.css") deve essere mantenuta ad ogni postback per esempio in una varibile di Session, per poi essere aggiornata quando vai a caricare un altro stile.
    La variabile di sessione ti serve nell'evnto page load per settare correttamente la property href del link button(vedi esempio).

  3. #3
    1sirena non è in linea Scolaretto
    Post
    77
    Non ho capito benissimo quello che vuoi dirmi...
    comunque con i temi e skin ho già provato ma sono riuscita a cambiare lo stile delle pagine solo mediante l'utilizzo di una combobox e non con dei semplici bottoni... e le combobox non sono la soluzione migliore al mio problema!!

    Ho provato in questo modo:

    - Ho creato 3 link nella mia pagina Master:
    file MasterPage.master

    codice:
     <div class="testo">
                        Testo:
                <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="?stile=g">Grande</asp:HyperLink>&nbsp;
                <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="?stile=i">Negativo</asp:HyperLink>&nbsp;
            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="?stile=n">Piccolo</asp:HyperLink>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                
                </div>
    e nel file MasterPage.master.vb:

    codice:
    Partial Class MasterPage1
        Inherits System.Web.UI.MasterPage
     
        
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim objcss As New HtmlLink()
            If Request.QueryString("stile") = "i" Then
                objcss.Href = "~/stili/css3.css"
            ElseIf Request.QueryString("stile") = "g" Then
                objcss.Href = "~/stili/css2.css"
            
            Else
                objcss.Href = "~/stili/css1.css"
            End If
            objcss.Attributes.Add("rel", "stylesheet")
            objcss.Attributes.Add("type", "text/css")
            Controls.Add(objcss)
        End Sub
    
    End Class
    al click dei pulsanti mi associa il giusto css solo che navigando nel sito ogni volta che viene caricata una pagina viene impostato il css1.

    Quale può essere il problema??


  4. #4
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...mi sembra alquanto strano/assurdo ciò che dici a riguardo dei temi/skin ...
    ...per il tuo "problema" nel mio precedente post ti ho indicato che è fondamentale salvare l'informazione dello stile selezionato in una variabile di Session, altrimenti perdi l'impostazione ad ogni postback.....

  5. #5
    1sirena non è in linea Scolaretto
    Post
    77
    Allora ho provato provato in questo modo! Nella pag Mappa.aspx.vb ho inserito il codice sottostante! Mandandolo in esecuzione dalla Home e cliccando su qualsiasi bottone "piccolo, grande, negativo" e poi cliccando sul link che mi porta alla pagina mappa.aspx non mi fa accedere e mi da eccezione alla riga:


    If Request.QueryString("stile") = "i" Then

    codice:
    Partial Class Mappa
        Inherits System.Web.UI.Page
    
    
        Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
            Dim objcss As New HtmlLink()
            If Request.QueryString("stile") = "i" Then
                Session("currentStyle") = "~/stili/css3.css"
            ElseIf Request.QueryString("stile") = "g" Then
                Session("currentStyle") = "~/stili/css2.css"
            End If
    
            'valore di default
            If Session("currentStyle") Is Nothing Then
                Session("currentStyle") = "~/stili/css1.css"
    
                objcss.Href = Session("currentStyle").ToString()
            End If
    
        End Sub
    End Class

    Cosa sbaglio??

  6. #6
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...giusto per farti capire...supponiamo di avere il seguente markup:
    codice:
    <asp:LinkButton ID="lnkPiccolo" runat="server">Piccolo</asp:LinkButton>
    <asp:LinkButton ID="lnkMedio" runat="server">Medio</asp:LinkButton>
    <asp:LinkButton ID="lnkGrande" runat="server">Grande</asp:LinkButton>
    il codice sarà:
    codice:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Session("styleCurrent") Is Nothing Then
                SetStyle(Session("styleCurrent").ToString())
            End If
    End Sub
    
    'Setta lo stile della pagina
    Private Sub SetStyle(ByVal urlStyle As String)
            Dim linkStyle As HtmlLink = New HtmlLink()
            linkStyle.Href = urlStyle
            linkStyle.Attributes.Add("rel", "stylesheet")
            linkStyle.Attributes.Add("type", "text/css")
            Page.Controls.Add(linkStyle)
    End Sub
    
    Protected Sub lnkPiccolo_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPiccolo.Click
            SetStyle("stylePiccolo.css")
            Session("styleCurrent") = "stylePiccolo.css"
    End Sub
    
    Protected Sub lnkMedio_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkMedio.Click
            SetStyle("styleMedio.css")
            Session("styleCurrent") = "styleMedio.css"
    End Sub
    
    Protected Sub lnkGrande_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkGrande.Click
            SetStyle("styleGrande.css")
            Session("styleCurrent") = "styleGrande.css"
    End Sub

  7. #7
    1sirena non è in linea Scolaretto
    Post
    77
    Ma ciò lo devo fare al caricamento di ogni pagina. giusto??

  8. #8
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    uhm no...puoi mettere la logica nella masterpage, in questo modo non devi scrivere il codice in ogni pagina...
    Se inserisci il codice nella masterpage devi effettuare una modifica per evitare un errore sulla collection dei controlli della pagina:
    Aggiungere nel markup della master page oltre ai tre linkbutton
    codice:
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    e modificare il codice del metodo SetStyle:
    codice:
    'Setta lo stile della pagina
    Private Sub SetStyle(ByVal urlStyle As String)
            Dim linkStyle As HtmlLink = New HtmlLink()
            linkStyle.ID = "lnkStyle"
            linkStyle.Href = urlStyle
            linkStyle.Attributes.Add("rel", "stylesheet")
            linkStyle.Attributes.Add("type", "text/css")
            PlaceHolder1.Controls.Add(linkStyle)
    End Sub

  9. #9
    1sirena non è in linea Scolaretto
    Post
    77
    Ultima Domanda! credo...

    Cosa fa questa istruzione?? cosa devo metterci al suo interno?

    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

  10. #10
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...il controllo PlaceHolder serve per aggiungere dinamicamente dei controlli targati runat server all'interno della pagina...
    Se noti ho sostituito nel metodo SetStyle l'ultima istruzione, cioè invece di effettuare un add alla collection dei controlli della pagina(Page.Control.Add), aggiungo il controllo creato dinamicamente LinkButton responsabile dello stile selezionato, alla collection dei controls del placeHolder.
    E' una sorta di fix per evitare l'errore:
    "The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases
    "

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi