+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

[ASP.NET]Una classe semplice semplice

  1. #1
    ubimaior non è in linea Scolaretto
    ..ma per me molto ostica.
    Programmo in ASP.Net da un po' di tempo e riesco a fare applicazioni anche abbastanza complesse.
    Però ripeto le stesse porzioni di codice diverse volte nelle varie pagine (spesso anche nella stessa) perché non riesco a capire le classi.

    Chiedo un aiuto per capire come realizzare una classe per il replace dei caratteri speciali.
    Ecco il codice che ho creato:

    ChangeText.vb:


    Public Class ChangeText
       
    
        Public _Testo As String
        Public Property Testo() As String
            Get
                Return _Testo        
            End Get
            Set(ByVal value As String)
                _Testo = value    
            End Set
        End Property
    
    
        Public Function Change(ByVal Testo As String) As String
    
    
    
          
            Testo = Replace(Testo, "è", "è")
            Testo = Replace(Testo, "ò", "ò")
            Testo = Replace(Testo, "ì", "ì")
            Testo = Replace(Testo, "à", "à")
            Testo = Replace(Testo, "ù", "ù")
            Testo = Replace(Testo, "é", "é")
            Testo = Replace(Testo, "€", "€")
            Testo = Replace(Testo, "‘", "‘")
            Testo = Replace(Testo, "’", "’")
            Testo = Replace(Testo, "©", "©")
            Testo = Replace(Testo, "®", "®")
            Testo = Replace(Testo, "«", "«")
            Testo = Replace(Testo, "»", "&raquo")
            Testo = Replace(Testo, "º", "º")
            Testo = Replace(Testo, "è", "è")
            Testo = Replace(Testo, "‰", "‰")
            Testo = Replace(Testo, "$", "$")
            Testo = Replace(Testo, "@", "@")
    
            Return Testo
    
        End Function
    
    End Class
    

    Nel code behind scrivo:

     Dim Testo As New ChangeText 
                     
    
                        Dim Descrizione As String
                        Descrizione = tbDescription.Text
    
    
                        Testo.Change(Descrizione)
    

    Però, qualsiasi cosa scrivo nel TextBox, il risultato è: "ChangeText"

    Dove sbaglio?

    Grazie
    Ultima modifica di bumm; 29-10-2011 00:15 

  2. #2
    ubimaior non è in linea Scolaretto
    OOPS, mi sono accorto di aver sbagliato sezione.

    Per favore, la spostate in quella giusta?

    Grazie

  3. #3
    Chico non è in linea Scolaretto
    Premetto che provengo dalla sezione "sbagliata" e non so nulla di ASP, ma forse posso esserti d'aiuto con la classe.
    Credo che il problema principale stia nella Function. La variabile che deve contenere il risultato è "Change" e non "Testo". In altre parole:
       Change = Replace(Testo, ....
       ...
       Return Change
    
    Inoltre devi decidere come passare la stringa in input. O la passi mediante la proprietà Testo oppure la passi attraverso l'argomento della Funtcion. Tu li stai usando entrambi.

  4. #4
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Secondo me non è il caso di creare la proprietà, e poi importante dare i nomi giusti ai metodi e le classi
    Public Class Utils
        Public Shared Function EncodeString(ByVal Testo As String) As String
            Testo = Replace(Testo, "è", "è")
            Testo = Replace(Testo, "ò", "ò")
            Testo = Replace(Testo, "ì", "ì")
            Testo = Replace(Testo, "à", "à")
            Testo = Replace(Testo, "ù", "ù")
            Testo = Replace(Testo, "é", "é")
            Testo = Replace(Testo, "€", "€")
            Testo = Replace(Testo, "‘", "‘")
            Testo = Replace(Testo, "’", "’")
            Testo = Replace(Testo, "©", "©")
            Testo = Replace(Testo, "®", "®")
            Testo = Replace(Testo, "«", "«")
            Testo = Replace(Testo, "»", "&raquo")
            Testo = Replace(Testo, "º", "º")
            Testo = Replace(Testo, "è", "è")
            Testo = Replace(Testo, "‰", "‰")
            Testo = Replace(Testo, "$", "$")
            Testo = Replace(Testo, "@", "@")
            Return Testo
        End Function
    End Class
    
    Visto che abbiamo dichiarato il metodo come shared, non c'e bisogna di creare l'istanza della classe. Basta accedere direttamente al metodo:
    Dim a As String = Utils.EncodeString("@$çòèà")
    
    Questo e quello che riguarda il tuo caso specifico. Anche se ho un forte dubbio sulla utilità di quel metodo, visto che esistono già i strumenti per codificare/decodificare i caratteri speciali:
    HttpServerUtility.HtmlEncode Method (String) (System.Web)
    ℹ️ Leggi di più su bumm ...

  5. #5
    ubimaior non è in linea Scolaretto
    Grazie mille.
    Giusto per capire...
    Quindi era la mancanza della proprietà shared a non farmi accedere al metodo della classe.

    Giusto?

    Ho usato il replace perché ho previsto di usare anche Testo = Replace(Testo, vbCrLf, "<br>")
    Cosa non possibile con HtmlEncode.

  6. #6
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Quindi era la mancanza della proprietà shared a non farmi accedere al metodo della classe.Giusto?
    No, shared ti permette di accedere al membro della classe senza istanziarlo(Dim Testo As New ChangeText - crei istanza della classe ChangeText)
    Il problema della classe che hai creato in precedenza - e che parametro della funzione Change - "Testo" aveva lo stesso nome, di proprietà "Testo" della classe. Quindi come fai a capire all'interno della funzione Change se accedi alla proprietà "Testo" oppure al Parametro "Testo"?
    ℹ️ Leggi di più su bumm ...

  7. #7
    ubimaior non è in linea Scolaretto
    Quote Originariamente inviato da bumm Visualizza il messaggio
    No, shared ti permette di accedere al membro della classe senza istanziarlo(Dim Testo As New ChangeText - crei istanza della classe ChangeText)
    Il problema della classe che hai creato in precedenza - e che parametro della funzione Change - "Testo" aveva lo stesso nome, di proprietà "Testo" della classe. Quindi come fai a capire all'interno della funzione Change se accedi alla proprietà "Testo" oppure al Parametro "Testo"?
    Ah, ok. Avevo creato un conflitto.

    Scusa la domanda banale ma voglio capire.

    Ho un file con migliaia di righe che fa dei controlli e che inserisce alcuni dati dentro un database.
    Visto che il mio programma ha anche altre pagine che usano gli stessi dati, per modificarli, voglio creare una classe che permette l'inserimento nel database.
    In questo modo non devo riportare lo stesso codice in ogni pagina (come ho fatto).


    Ho creato la classe: UserSessin che contiene i dati degli utenti.
    Nella pagina NewIssue che, come si evince dal nome, serve per inserire una nuova pratica e devo controllare, tra le altre cose, il livello di accesso e la mansione.

    La classe ha la proprietà Livello e mansione.

     Public Shared _livello As Integer
      Public Shared _mansione As String
    
        Public Shared Property Livello() As Integer
    
            Get
                Return _livello
            End Get
            Set(ByVal value As Integer)
                _livello = value
            End Set
        End Property
    
         Public Shared Property Mansione() As String
    
            Get
                Return _mansione
            End Get
            Set(ByVal value As String)
                _mansione = value
            End Set
        End Property
    

    Nel code behind del codice metto:

    Dim Mans As String = UserSession.Mansione(Session("Mansione"))
    
    Esce questo errore

    System.InvalidCastException: Cast non valido dalla stringa "Impiegato" al tipo 'Integer'.

    Perché tipo "integer"?

    E' dichiarato come string!

    Se provo con il livello:

    Dim Lvl As Integer = UserSession.Livello(Session("Livello"))
    
    Oppure
    Dim Lvl As Integer = UserSession.Livello(Session("Livello").ToString)
    
    Errore:

    BC32016: 'Public Shared Property Livello As Integer' non ha parametri e il tipo restituito non può essere indicizzato.

    Non capisco....

    Sapete spiegarmi dove sbaglio?
    Grazie

  8. #8
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Ho un file con migliaia di righe che fa dei controlli e che inserisce alcuni dati dentro un database.
    Visto che il mio programma ha anche altre pagine che usano gli stessi dati, per modificarli, voglio creare una classe che permette l'inserimento nel database.
    In questo modo non devo riportare lo stesso codice in ogni pagina (come ho fatto).
    Ed è giusto. Il codice della pagina non deve contenere il codice di accesso al database.
    Ci sono diversi tipi di architettura che puoi adottare...
    La più vantaggiosa - MVC (Model view controller)
    Quindi hai 3 strati:
    - Modelli(li puoi paragonare ai oggetti business)
    - Controller(che puoi paragonare allo strato di business logica)
    - View(viste - livello rappresentativo - e quindi le tue pagine, che non hanno intelligenza ma servono solo a presentare i dati)

    Ho creato la classe: UserSessin che contiene i dati degli utenti.
    Nella pagina NewIssue che, come si evince dal nome, serve per inserire una nuova pratica e devo controllare, tra le altre cose, il livello di accesso e la mansione.
    Ti ho fatto l'esempio shared, e tu lo metti da tutte le parti. Shared serve solo per non creare l'istanza della classe per una procedura che non dipende(non accede ai membri) dalla classe stessa.

    Per Esempio la tua classe UserSession contiene le proprietà che cambiano da una istanza al altra e quindi non devono essere dichiarati come Shared.

    Dim Mans As String = UserSession.Mansione(Session("Mansione"))
    stai usando la proprietà come un metodo. Invece devi assegnare direttamente il valore alla proprietà:
    UserSession.Mansione = DirectCast( Session("Mansione"), string);
    Dim Mans As String = UserSession.Mansione;
    
    Anche se non riesco a comprendere utilità di questo codice....

    P.S. in futuro per ogni problema diverso dovresti aprire una nuova discussione
    ℹ️ Leggi di più su bumm ...

  9. #9
    ubimaior non è in linea Scolaretto
    Quote Originariamente inviato da bumm Visualizza il messaggio
    Ti ho fatto l'esempio shared, e tu lo metti da tutte le parti. Shared serve solo per non creare l'istanza della classe per una procedura che non dipende(non accede ai membri) dalla classe stessa.

    Per Esempio la tua classe UserSession contiene le proprietà che cambiano da una istanza al altra e quindi non devono essere dichiarati come Shared.
    Avevo provato prima senza shared. Vedendo che non funzionava ho provato a rimetterlo.
    Quote Originariamente inviato da bumm Visualizza il messaggio
    stai usando la proprietà come un metodo. Invece devi assegnare direttamente il valore alla proprietà:
    UserSession.Mansione = DirectCast( Session("Mansione"), string);
    Dim Mans As String = UserSession.Mansione;
    
    Grazie mille. Ora spero di riuscire da solo. Spero di poter contare sul tuo aiuto in caso di ulteriori difficoltà.
    Quote Originariamente inviato da bumm Visualizza il messaggio

    Anche se non riesco a comprendere utilità di questo codice....
    Alcune funzioni sono disponibili in base al livello, altre solo per alcune mansioni (es: solo il Sales Manager può autorizzare un prezzo più basso dell'anagrafica ma tutti quelli dell'amministrazione possono accedera ad alcune pagine, gli altri no).
    Quote Originariamente inviato da bumm Visualizza il messaggio
    P.S. in futuro per ogni problema diverso dovresti aprire una nuova discussione
    Farò così.
    Ancora grazie.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Esercizio semplice
    Da Prophet nel forum Python
    Risposte: 5
    Ultimo Post: 30-06-2020, 16:08
  2. Una ricerca semplice....
    Da Kung78 nel forum LibreOffice, OpenOffice e altro
    Risposte: 1
    Ultimo Post: 03-11-2009, 13:48
  3. Query semplice
    Da WEM nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 12-01-2007, 16:28
  4. domandina semplice
    Da felix76 nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 15-09-2005, 16:34
  5. Access: domandina semplice semplice...
    Da JPetrucci nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 02-09-2004, 15:02