Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di polinn
    Registrato dal
    Oct 2003
    Messaggi
    186

    [C#] e forse anche [VB.NET] Utilizzo del ViewState

    Sto cercando di utilizzare il ViewState per la gestioni delle variabili di alcuni controlli che ho creato.

    Utilizzando istanze di una mia classe, però, mi genera il seguente errore:
    Il tipo 'Ordinazioni.Piatto' deve essere contrassegnato come Serializable o avere un TypeConverter diverso da ReferenceConverter da mettere in ViewState.

    Qualcuno sa dirmi come fare ad inserire oggetti personalizzati all'interno del ViewSate?

    Per il momento utilizzo la Session con indice "nomeVariabile"+this.ID... che più o meno funziona allo stesso identico modo...
    Il mondo è una DEMO...
    ...e come tale ne subisce l'effetto!

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti rispondo per quel poco che posso.
    Allora, posso memorizzare nel viewstate una istanza di una classe, solo se la classe ha l'attributo <serializable>.

    Per quanto riguarda i controlli utente, ho sempre visto la tecnica di memorizzare nel viewstate solo le variabili interne che debbono mantenere lo stato. Altro non so

    Pietro

  3. #3
    Utente di HTML.it L'avatar di polinn
    Registrato dal
    Oct 2003
    Messaggi
    186

    ...nada...

    Ci ho provato, ho dichiarato l'attributo serializable, ma continua a darmi lo stesso errore...
    Ecco il codice:
    codice:
    [Serializable()]
    public class PincoPalla(){
    
    [...]
    
    }
    :gren:
    Il mondo è una DEMO...
    ...e come tale ne subisce l'effetto!

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Questo è un esempio Pincus Pallas che funziona
    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            Dim j As PincoPalla
    
            If Not Me.IsPostBack Then
                j = New PincoPalla("Pinco", "Palla")
                PrintLn(j.NomeCompleto, "Nome completo prima di serializzare nel viewstate")
                Me.ViewState.Add("PincoPalla", j)
    
            Else
                j = DirectCast(Me.ViewState("PincoPalla"), PincoPalla)
                PrintLn(j.NomeCompleto, "Nome completo dopo deserializzazione da viewsate")
            End If
    
    
        End Sub
    
    End Class
    
    <Serializable()> Public Class PincoPalla
        Private _nome$ = "", _cognome$ = "", _nomecompleto$ = ""
    
        Public Sub New(ByVal nome$, ByVal cognome$)
            Me._nome = nome
            Me._cognome = cognome
        End Sub
        Public Property Nome$()
            Get
                Return Me._nome
            End Get
            Set(ByVal Value$)
                Me._nome = Value
            End Set
        End Property
    
        Public Property Cognome$()
            Get
                Return Me._cognome
            End Get
            Set(ByVal Value$)
                Me._cognome = Value
            End Set
        End Property
    
        Public ReadOnly Property NomeCompleto$()
            Get
                Return Me.Nome & " " & Me.Cognome
            End Get
        End Property
    End Class
    Pietro

  5. #5
    Utente di HTML.it L'avatar di polinn
    Registrato dal
    Oct 2003
    Messaggi
    186
    Ok... il codice l'ho capito, è semplice e facilmente traducibile in C#... ma non vedo la differenza con il mio!

    L'unica cosa che hai fatto è aggiungere l'attributo Serializable alla classe:
    in VB.NET è <Serializable()>
    in C# dovrebbe essere [Serializable()]

    ...o sbaglio?

    Mi viene un dubbio... in realtà la mia pagina eredita da un'altra classe:
    codice:
    [Serializable()]
    public class Piatto : XPObject
    {
    private string Descrizione;
    private int Calorie = 0;
    private char LetteraPreferita = ' ';
    
    [...]
    
    [Association("DettagliMenuGiornalieroPiatto", typeof(DettaglioMenuGiornaliero)), Aggregated]
    public XPCollection DettagliPiatto{ get{return GetCollection("DettagliPiatto");}}
    
    [...]
    
    public Piatto(){}
    public Piatto(Session session) : base(session){}
    }
    Io ho provato a scrivere Serializable con e senza l'aperta e chiusa parentesi... ma mi da sempre lo stesso errore...
    Il mondo è una DEMO...
    ...e come tale ne subisce l'effetto!

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Se erediti da una classe non serializzabile ...
    Pietro

  7. #7
    Utente di HTML.it L'avatar di polinn
    Registrato dal
    Oct 2003
    Messaggi
    186

    E perchè???
    Io voglio serializzare solo quella classe... mica dovrò partire da Object e rendere serializzabile tutta la famiglia!?

    Mi sembra strano...
    Il mondo è una DEMO...
    ...e come tale ne subisce l'effetto!

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.