LoginName

mercoledì 12 settembre 2007 - 18.58

gae58 Profilo | Senior Member

salve,

ho creato una pageMster ed al suo Interno ho inserito un oggetto loginview.

ho creato una pagina aspx collegata alla masterPage. Una volta autenticato l'utente, vorrei aggiornare il loginName in questa maniera:
LoginName Utente1 = (LoginName)Master.FindControl("Utente");
Utente1.FormatString = "Benvenuto {0}!";

ma sulla seconda riga mi da' errore in quanto mi dice "riferimento ad un oggetto non impostato su una istanza oggetto".

Non ho capito cosa voglia dire.

Qualche aiuto?

grazie
Gaetano

Brainkiller Profilo | Guru

>LoginName Utente1 = (LoginName)Master.FindControl("Utente");
> Utente1.FormatString = "Benvenuto {0}!";

Probabilmente non devi fare Master.FindControl ma c'è un altro container che contiene il LoginName magari un ContentPlaceholder.

Inoltre ti consiglio di fare semplicemente così:

<asp:LoginView runat="server" ID="Lv1"> <LoggedinTemplate> Benvenuto <asp:LoginName ecc.ecc. </LoggedinTemplate> </asp:LoginView>

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

hai ragione in entrambe le situazioni.

Il login è compreso in un ContentPlaceHolder.

Ho provato cambiando:
LoginName Utente1 = (LoginName)Master.FindControl("Utente");
in
LoginName Utente1 = (LoginName)Master.CPHDx2.FindControl("Utente");

ma di da' errore, mica mi potresti indirizzare su come si imposta il findControl in questa situazione?

Ho provato anche con l'intellisense, ma non riesco a capire cosa mettere nel comando.

grazie

Gaetano

Brainkiller Profilo | Guru

>hai ragione in entrambe le situazioni.
>Il login è compreso in un ContentPlaceHolder.
>Ho provato cambiando:
>LoginName Utente1 = (LoginName)Master.FindControl("Utente");
>LoginName Utente1 = (LoginName)Master.CPHDx2.FindControl("Utente");

Non mi hai detto niente della soluzione che ti ho proposto.

Per risponderti mi mancano dei pezzi come hai dichiarato l'oggetto LoginName nell'aspx ?

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

>hai ragione in entrambe le situazioni.
Non mi hai detto niente della soluzione che ti ho proposto.

scusa forse sono statopoco chiaro. Si l'ho provato e va bene, però indico l'utente anche sulla testa della pagina.

Questo è il codice che c'è nella masterPage:
<asp:ContentPlaceHolder ID="CPHDx1" runat="server">
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Benvenuto:&nbsp;
<asp:LoginName ID="LoginName1" runat="server" Style="position: relative" />
<br />
<br />
<asp:LoginStatus ID="LoginStatus2" runat="server" Style="position: relative" />
</LoggedInTemplate>
<AnonymousTemplate>
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" style="position: relative; top: 0px;" />
</AnonymousTemplate>
</asp:LoginView>
</asp:ContentPlaceHolder>

Nella Pagina aspx, vorrei far visualizzare nel page:Load il nome dell'utente, aggiornando le txt:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
/* Messaggio di Benvento all'Utente loggato*/
LoginName Utente1 = (LoginName)Master.FindControl("Utente");
//Utente1.FormatString = "Benvenuto {0}!";


/* Cambia l'Intestazione nell'Header della Pagina*/
Label Utente = (Label)Master.FindControl("lblInte01");
Utente.Text = "Utente [" + User.Identity.Name +"]";
//(Label)Master.FindControl("lblInte01").text = "Utente " + User.Identity.Name;
}

}

Sulle 2 righe remmate, mi da' l'errore e quindi le ho disattivate.

Spero di non aver tralasciato nulla

grazie


Gaetano

Brainkiller Profilo | Guru

>LoginName Utente1 = (LoginName)Master.FindControl("Utente");

Secondo quello che mi hai postato stai facendo un FindControl di un oggetto con ID "utente" ma nella pagina che hai incollato non c'è nessun oggetto con questo ID. Per forza ti dà errore di Null Reference.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

hai ragione e ti chiedo scusa per il tempo che ti ho fatto perdere, ma amche cambiando l'ID e mettendo utente, mi da' sempre lo stesso errore, questo è il codice modificato:
<asp:ContentPlaceHolder ID="CPHDx1" runat="server">
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
<asp:LoginName ID="Utente" runat="server" Style="position: relative" />
<br />
<br />
<asp:LoginStatus ID="LoginStatus2" runat="server" Style="position: relative" />
</LoggedInTemplate>
<AnonymousTemplate>
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" style="position: relative; top: 0px;" />
</AnonymousTemplate>
</asp:LoginView>
</asp:ContentPlaceHolder>

Tieni presente che seguito il tuo consiglio e questo codice è diverso dall'altro.

Forse all'interno del loginView c'è bisogno di un'altra sintassi?

Gaetano
Gaetano

Brainkiller Profilo | Guru

>hai ragione e ti chiedo scusa per il tempo che ti ho fatto perdere,
>ma amche cambiando l'ID e mettendo utente, mi da' sempre lo stesso
>errore, questo è il codice modificato:
>Forse all'interno del loginView c'è bisogno di un'altra sintassi?

Tu quando fai il FindControl devi farlo sul Container più interno. Cioè in questo caso:

(LoginName)LoginView1.FindControl("utente");

vedrai che funziona. La FindControl non è ricorsiva.
ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

ho provato:
LoginName Utente1 = (LoginName) LoginView1.FindControl("utente");

ma mi dice che loginView1 non esiste nel contesto corrente.

Ho rivisto la masterPage, e l'ID LoginView1 c'è.
Non è che siccome sta nel LoggedInTemplate non lo può trovare?.

Ho provato a mettere il loginName nel ContentPlaceHolder ed amche lì mi da' lo stesso errore.
Penso che in tutti e due i casi il findControl vada usato in un'altra maniera, che ne pensi?




Gaetano

Brainkiller Profilo | Guru

>ho provato:
>LoginName Utente1 = (LoginName) LoginView1.FindControl("utente");
>ma mi dice che loginView1 non esiste nel contesto corrente.

In genere si fa così naturalmente, il LoggedInTemplate viene generato solo se sei loggato. Se sei utente anonimo non c'è quindi andrebbe comunque in errore quindi devi eseguirlo solo se Context.User.Identity.IsAuthenticated è a true.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

allora ho fatto delle prove ed ho notato che se metto un qualsiasi oggetto, compreso il loginView all'interno del ContentPlaceHolder o loginView od altro non lo riconosce, se invece lo metto al di fuori, cioè sulla form me lo riconosce.

Non è, per caso che trova un oggetto solo se è posizionato sulla pagina principale?


Gaetano

Brainkiller Profilo | Guru

Mettilo in un modulo .ascx e poi il modulo trascinalo nella Master Page.
Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

scusami, ma sono alle prime armi, che significa?


Gaetano

Brainkiller Profilo | Guru

>scusami, ma sono alle prime armi, che significa?

Modulo .ascx quando fai Tasto Destro New Item, puoi scegliere una nuova pagina web oppure un .ascx che è un modulo ASP.NET. Il modulo poi puoi trascinarlo in enne pagine web. In questo modo se devi fare una modifica modifichi solo il modulo e sarà aggiornato chiaramente ovunque.

Beh sei sei alle prime armi mi sembra un po' eccessivo quello che stai facendo, con i FindControl ecc.ecc. io fare un passettino indietro magari.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gae58 Profilo | Senior Member

con i controlli Utente è un po' presto.

Per qunto riguarda l'istruzione ho letto varie, compreso l'MSDN cose e comprato e letto2 libri, però non sono riuscito a trovare nulla di base.

Per esempio leggendo le masterPage e chiedendo aiuto ho capito in parte il findControl, ma quello che mi hai detto tu che è sempre l'ultimo contenitore da chiamre o perchè non funziona quello che voglio fare io non trovo niente da nessuna parte.

Qualche consiglii su cosa leggere o sul percorso da fare?

grazie

Gaetano
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5