Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212

    Custom Control e ViewState

    Salve a tutti,
    da questa mattina mi sto cimentando nella creazione di un custom control.

    In effetti nei milioni di esempi scaricati da internet o dai manuali, nessuno mi ha dato la possibilità di gestire il viewstate o almeno avrebbero dovuto ma mi sa che mi perdo qualcosa per strada.

    Posto un esempio che ho scritto per poi magari avere un consiglio:

    IL SEGUENTE è IL CODICE CHE GESTISCE L'EVENTO ONLOAD DELLA AGINA ASPX DOVE è CONTENUTO IL MIO CONTROLLO "CONFIGREPEATER" E DEFINISCO DELLE PROPRIETà.
    NEL FORM DELLA PAGINA ASPX C'è ANCHE UN PULSANTE PER IL SUBMIT.

    Codice PHP:
    <script runat="server">
        protected 
    void Page_Load(object senderEventArgs e)
        {
            
    ConfigRepeater cf = new ConfigRepeater();
            
            if (!
    Page.IsPostBack)
            {
                
    cf.Ripetizioni 5;
                
    cf.Messaggio "Prova2";
            }
            
    form1.Controls.Add(cf);
        }
    </script> 
    SEGUE LA CLASSE DEL CUSTOM CONTROL:
    UNA VOLTA ISTANZIATO IL CONTROLLO, IMPOSTO LE DUE PROPRIETà, CLICCO SUL SUBMIT E I VALORI MEMORIZZATI NELLE VIEWSTATE VENGONO PERSI, MENTRE DOVREBBERO RESTARE MEMORIZZATE NEL CONTROLLO.. COSA SBAGLIO?

    Codice PHP:
    public class ConfigRepeater WebControl
    {
        public 
    ConfigRepeater()
        {

        }

        public 
    int Ripetizioni
        
    {
            
    get { return (int)ViewState["Ripetizioni"]; }
            
    set ViewState["Ripetizioni"] = value; }
        }

        public 
    string Messaggio
        
    {
            
    get { return (string)ViewState["Messaggio"]; }
            
    set ViewState["Messaggio"] = value; }
        }

        protected 
    override void Render(HtmlTextWriter writer)
        {
            
    base.RenderContents(writer);
            for (
    int i 0Ripetizionii++)
            {
                
    writer.Write(Messaggio "
    "
    );
            }
        }


  2. #2
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Io non amo molto i controlli utente ma, il tuo problema è che i controlli creati "al volo" per essere inclusi nella viewstate devono essere aggiunti nel page_init che avviene prima del page_load.
    Ti ricordo anche che pur non segnalando niente di strano nel page_init il postback è sempre false.

    Legnetto

  3. #3
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212
    Ciao Legnetto, grazie dell'indicazione anche se ad essere sincero ho provato a fare un po' di prove ma in ogni caso non memorizza lo stato e di certo per mie lacune
    Ti sarei davvero molto GRATO se dal mio semplice esempio tu potessi pigliare spunto per un semplicissimo sempio funzionante.

    Trovo comodi i custom control per il fatto che non necessitano la registrazione nelle pagine per essere utilizzati.

    Grazie mille ancora a te e a tutti quelli sapranno tirarmi fuori da questa buca nella quale mi trovo da questa mattina!!

  4. #4
    Utente di HTML.it L'avatar di edaje
    Registrato dal
    Jul 2003
    Messaggi
    363
    Prova così

    codice:
    public int Ripetizioni
        {
            get { 
                    object o = ViewState["Ripetizioni"];
                    if(o==null)
                        return 0; //Ritorni un valore di default
                        return (int)ViewState["Ripetizioni"];
                     }
            set { ViewState["Ripetizioni"] = value; }
        }

  5. #5
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Ribadisco il mio non amore per questo genere di controlli ma, guardando il codice iniziale, se non sbaglio, prima di verificare il post back istanzi sempre un nuovo controllo che chiaramente sarà vuoto......
    Io uso i controlli personalizzati quindi prendi le mie considerazioni con cautela...
    Ciao
    Legnetto

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 © 2025 vBulletin Solutions, Inc. All rights reserved.