122 messaggi dal 15 gennaio 2008
Salve a tutti,
Sto scrivendo un form di "creazione utente" che, oltre ai classici campi utente, password ed emailo, prevede anche altre informazioni.
Queste informazioni le salvo nel db tramite l'utilizzo del Profile. Quando è l'utente stesso a modificare i propri dati, il Profile lavora bene.

Il problema mi si presenta quando, come amministratore, vado a creare dei nuovi utenti: i valori che andrebbero memorizzati nel profile non vengono invece salvati...

Il form è un form classico con textbox, controlli di validazione ecc... quindi non sto a scrivervi il codice.

Vi posto invece il codice che ho scritto per il salvataggio del nuovo utente:
protected void B_Crea_Click(object sender, EventArgs e)
    {
        // Crea utenti con la classe Membership
        if (Membership.GetUser(UserName.Text) != null)
        {
            L_Errore.Text = "Nome utente già presente!";
        }
        else
        {
            MembershipUser utente = Membership.CreateUser(UserName.Text.Trim(), Password.Text.Trim(), Email.Text.Trim());

            Roles.AddUserToRole(UserName.Text.Trim(), D_Ruolo.SelectedValue);

            Profile.GetProfile(UserName.Text.Trim()).CAP = T_CAP.Text.Trim();
            ....
            ....
            Profile.GetProfile(UserName.Text.Trim()).Nome = T_Nome.Text.Trim();
            Profile.GetProfile(UserName.Text.Trim()).Save();

            L_Errore.Text = "Utente creato";

            ......
            ......

        }
    }

Come detto, l'utente viene creato, ma non vengono salvate invece le informazoini del Profile...
Suppongo che l'errore sia in "Profile.GetProfile(UserName.Text.Trim())"...

Grazie

Modificato da Yield il 20 ottobre 2008 16.17 -
652 messaggi dal 21 gennaio 2007
Contributi
Prova a creare un oggetto di tipo ProfileCommon, fare su quello tutte le modifiche e poi lanciare il metodo Save.

ProfileCommon pro = Profile.GetProfile(UserName.Text.Trim());
pro.CAP = T_CAP.Text.Trim();
prop.Nome = T_Nome.Text.Trim(); 
prop.Save(); 
122 messaggi dal 15 gennaio 2008
PeppeDotNet ha scritto:
Prova a creare un oggetto di tipo ProfileCommon, fare su quello tutte le modifiche e poi lanciare il metodo Save.

ProfileCommon pro = Profile.GetProfile(UserName.Text.Trim());
pro.CAP = T_CAP.Text.Trim();
prop.Nome = T_Nome.Text.Trim(); 
prop.Save(); 


perfetto funziona, grazie!

Giusto per capire.... potresti spiegarmi la differenza tra quello che ho scritto io e quello che hai scritto te? Cioè a me sembra che abbiamo scritto la stessa cosa, ma te con un passaggio in più che io (probabilmente a torto) davo per scontato...
652 messaggi dal 21 gennaio 2007
Contributi
certo..
allora, ogni volta che chiami il metodo GetProfile, questo ti ritorna un'istanza della classe ProfileCommon.
poi è su questa istanza che devi applicare le tue modifiche e dalla quale poi chiami il metodo Save(), così le modifiche effettuate vengono così persistite sul database.

facendo invece
Profile.GetProfile(UserName.Text.Trim()).Save();

non salvi alcuna modifica, perchè prelevi un'istanza che contiene le informazioni di partenza e non le tue modifiche.

se provi a farti stampare la proprietà Nome, nel tuo codice, prima e dopo aver salvato, ti accorgerai che contiene sempre lo stesso valore, valore letto dal database:
lbl.Text = Profile.GetProfile(UserName.Text.Trim()).Nome;
Profile.GetProfile(UserName.Text.Trim()).Nome = T_Nome.Text.Trim(); 
Profile.GetProfile(UserName.Text.Trim()).Save(); 

//stesso valore della riga uno
lbl.Text = Profile.GetProfile(UserName.Text.Trim()).Nome;


spero d'esser stato chiaro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.