Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Passaggio valori tra classi

    Buonasera a tutti.
    Sono da poco entrato nel mondo ASP.NET e mi trovo in difficoltà con un passaggio di valori.
    Spiego:
    Ho una pagina Clienti.aspx.cs e siccome i pulsanti sono molti, pensavo, per avere il codice più ordinato, di fare una funzione per ogni pulsante e al click richiamare la funzione apposita.

    Esempio terra-terra:

    Clienti.aspx
    ---------------------------------------------------------
    <asp:Label ID="LblUno" runat="server" style="font-weight: 700" Text="Lavoro "></asp:Label>
    <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" />
    ----------------------------------------------------------
    Clienti.aspx.cs
    ----------------------------------------------------------
    protected void Button2_Click(object sender, EventArgs e)
    {
    Funzioni newFunct = new Funzioni();
    newFunct.ElaboraDati(this);
    }
    ----------------------------------------------------------
    Funzioni.cs
    ----------------------------------------------------------
    public void tracciatoConad(Page sender)
    {
    // Cerca e associa oggetti
    Label LblUno = (Label)sender.FindControl("LblUno");

    LblUno.Text = "Eseguito con successo.";
    }
    ----------------------------------------------------------

    Il messaggio di errore è Riferimento a un oggetto non impostato su un'istanza di oggetto. - Errore sulla riga LblUno.Text = "Eseguito con successo."; (Non mi sorprende che non funzioni...)

    La domanda è: voi che sicuramente ne sapete più di me, come posso o risolvere l'errore?
    Altrimenti, c'è un modo che mi permetta di effettuare quello che ho spiegato (spero abbastanza chiaramente, sopra?

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Buona l'idea ma stai sbagliando approccio: le classi che racchiudono le funzioni non devono sapere nulla di chi le chiama, devono limitarsi ad elaborare i dati ed a fornire risultati. Il fetch dei dati lo fai prima: nel button_click. ti faccio un esempio:

    codice:
    protected void Button2_Click(object sender, EventArgs e)
    {
        //fetch dei dati
        int a = Convert.ToInt32(lblA.Text);
        int b = Convert.ToInt32(lblb.Text);
    
        //elaborazione che faccio fare alla classe esterna
        ClasseFunzioni bll = new ClasseFunzioni();
        int s = bll.Somma(a,b);
     
        //presentazione dei risultati   
        lblS.Text = s;
    }
    La funzione Somma (inutile che la scrivo) somma due interi e ne restituisce il risultato ma NON SA nulla di chi l'ha chiamata (in questo caso una pagina asp.net). prelevare i dati e presentare i risultati è un lavoro che puoi fare direttamente nell'handler del pulsante.
    Rispetto al tuo approccio questo inoltre è molto piu manuntenibile perche se la struttura della pagina cambia (vanno via dieci pulsanti) quello delle funzioni non cambia perche non dipende dalla pagina ma da "richieste di business" (la possibilita di sommare due interi).

    Nell esempio mi sono affidato al fatto che i dati delle label fossero validi. Generalmente questi devono essere validati, il lavoro di validazione puoi affidarlo ad un altra classe adhoc e sfruttare lo stesso principio: prelevi le stringhe dalle label le dai come input alle funzioni di conversione che validano, fanno tutto il lavoro a modino e ti restituiscono i risultati. Anche in questo caso la classe non sa nulla del fatto che a chiamarla è stata una pagina asp.net.

  3. #3
    Concordo, capisco l'approccio iniziale col linguaggio ma è sbagliato e sconsigliato, soprattutto al crescere del software, avrai un accoppiamento così alto che anche andare a cambiare il nome di una variabile diventerà un incubo.

    Come dice il mio collega, devi chiamare la funzione dalla funzione evento della pressione del tasto, e devi leggere il valore di return, e lo imposti sempre dalla funzione tasto. Anche perché se un giorno vorrai usare quella funzione su un'altra pagina non potrai farlo se non userai lo stesso oggetto che hai usato in questa, figuriamoci se vuoi usarla in un altro progetto.

    Riusabilità
    Callisto Software Web Design, Web Marketing, Sviluppo Software, Consulenza IT

  4. #4
    Grazie ad entrambi per la tempestiva risposta.

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.