2010-08-11 17 views
10

Ho un LoginView nella mia applicazione APS.NET con AnonymousTemplate e LoggedInTemplate. Ho inserito il controllo LoginStatus in LoggedInTemplate ma non funziona come previsto.Login ASP.NET in LoginView non attiva evento LoggingOut

Ecco il codice

<asp:LoginView ID="LoginView1" runat="server"> 
    <AnonymousTemplate> 
     <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate" 
      DisplayRememberMe="False" PasswordRecoveryUrl="/" 
      DestinationPageUrl="/"> 
     </asp:Login> 
    </AnonymousTemplate> 
    <LoggedInTemplate> 
     You are logged in as 
     <asp:LoginName ID="LoginName1" runat="Server"></asp:LoginName>. 
     <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="Redirect" 
      LogoutPageUrl="/" onloggingout="LoginStatus1_LoggingOut" /> 
    </LoggedInTemplate> 
</asp:LoginView> 

Tutti i gestori di eventi siano correttamente definiti nel codice al file.

Il problema è che se l'utente effettua il login, vedrà il suo nome utente con il collegamento di disconnessione dal controllo LoginStatus. Facendo clic sul link di logout si riporta l'utente al modulo di login (sia il modulo di login che di logout fanno parte dello stesso controllo utente) ma se aggiorno la pagina l'utente è ancora loggato.

Ho notato che se mi muovo LoginStatus controlla all'esterno di LoginView, quindi il processo di disconnessione funziona come previsto. Ho anche notato che quando LoginStatus si trova in LoginView, quindi non genera un evento di disconnessione.

Qualcuno ha qualche idea quale potrebbe essere il problema?

+0

In realtà ho esattamente lo stesso problema. Ho un controllo LoginStatus in LoggedInTemplate e non attiva l'evento LoggingOut. Non sono sicuro se sia valido annidarli in quel modo. Sembra che sul postback (quando si fa clic sul collegamento Disconnessione) il controllo LoginStatus non faccia più parte della pagina, pertanto non attiva l'evento. – e36M3

+0

Strano ... Ho provato la stessa identica configurazione di te su un'applicazione in .NET 4.0. Mi sono appassionato e non ho questo problema ... Stai usando Ajax o qualcosa del genere nella pagina? Prova a farlo su un nuovo progetto per vedere se lo fa sempre. Stai usando Visual Studio Devlopement Server o stai usando IIS? Non so se può cambiare qualcosa ma è solo perché voglio provare a rendere il mio progetto il più simile possibile al tuo. –

+0

È risultato essere il problema Sitecore (anche se non ho menzionato che sto usando quello su Sitecore) e nel normale progetto ASP.NET questo non è un problema. – RaYell

risposta

2

sto correndo negli stessi problemi qui. Il controllo loginstatus al di fuori del controllo loginview funziona come desiderato. Sembra sciocco che non funzioni all'interno del controllo loginview.

MODIFICA ** OK, quindi ho omesso che stavo creando questa pagina in Sitecore. A quanto pare Sitecore meddels in qualche modo con il controllo LoginView e deve essere aggiunto alla sezione seguente nel web.config:

<sitecore> 
    <rendering> 
     <typesThatShouldNotBeExpanded> 
     <type>System.Web.UI.WebControls.LoginView</type> 
     </typesThatShouldNotBeExpanded> 
    </rendering> 
    </sitecore> 

Thank some other guy...

-Victor F.

+0

ha funzionato anche per me, grazie per aver postato la soluzione! – Mark

0

Hai provato a cambiare il tuo LogoutAction a LogoutAction="RedirectToLoginPage"? Di solito permetto a .NET di cancellare il cookie che rende l'evento OnLoggingOut non necessario.

1
FormsAuthentication.SignOut() 
FormsAuthentication.RedirectToLoginPage() 

Inoltre, hai utilizzato l'autenticazione del modulo in modo corretto, cioè hai inserito una configurazione Web nelle directory interne?

<system.web> 
<authorization> 
    <allow users="?"/> 
</authorization> 

1

sto vivendo lo stesso problema. Ma la mia soluzione era di scambiare il controllo loginstatus per un controllo hyperlink e far passare il collegamento ipertestuale alla mia home page con un parametro querystring allegato come "logout = true" e quindi sulla mia home page controllare Request.QueryString per il valore e se non è nullo il fare questo.

FormsAuthentication.SignOut(); 
Problemi correlati