2010-08-11 5 views
10

Ich habe eine LoginView in meiner APS.NET-Anwendung mit AnonymousTemplate und LoggedInTemplate. Ich habe LoginStatus-Steuerelement in LoggedInTemplate, aber es funktioniert nicht wie erwartet.ASP.NET LoginStatus innerhalb LoginView löst kein LoggingOut-Ereignis

Hier ist der Code

<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> 

Alle Event-Handler korrekt in Code hinter Datei definiert sind.

Das Problem ist, dass wenn Benutzer sich anmeldet er seinen Benutzernamen mit Logout Link von LoginStatus Kontrolle sehen wird. Ein Klick auf den Abmelde-Link führt den Benutzer zurück zum Anmeldeformular (sowohl Anmelde- als auch Abmeldungsformular gehören zum selben Benutzersteuerelement), aber wenn ich die Seite aktualisiere, ist der Benutzer noch angemeldet.

Ich habe festgestellt, dass wenn ich mich bewege LoginStatus-Steuerelement außerhalb der LoginView und Abmeldeprozess funktioniert wie erwartet. Ich habe auch bemerkt, dass, wenn LoginStatus innerhalb von LoginView ist, es kein Abmeldeereignis auslöst.

Hat jemand irgendwelche Ideen, was könnte das Problem sein?

+0

Ich habe eigentlich genau das gleiche Problem. Ich habe ein LoginStatus-Steuerelement in der LoggedInTemplate und es löst das LoggingOut-Ereignis nicht aus. Ich bin mir nicht sicher, ob es richtig ist, sie so zu nisten. Es scheint, dass das LoginStatus-Steuerelement auf dem Postback (beim Klicken auf den Link Abmelden) nicht länger Teil der Seite ist, daher wird das Ereignis nicht ausgelöst. – e36M3

+0

Seltsam ... Ich habe versucht das gleiche Setup wie Sie auf einer Anwendung in .NET 4.0 Ich habe Maded und ich habe dieses Problem nicht ... Verwenden Sie Ajax oder so etwas auf der Seite? Versuchen Sie dies in einem neuen Projekt zu tun, um zu sehen, ob es das immer tut. Verwenden Sie Visual Studio Devlopement Server oder verwenden Sie IIS? Weiß nicht, ob es etwas ändern kann, aber nur, weil ich versuchen möchte, dass mein Projekt so gut wie möglich aussieht. –

+0

Es stellte sich heraus, dass es sich um ein Sitecore-Problem handelte (obwohl ich nicht erwähnt habe, dass ich das auf Sitecore verwende) und in normalen ASP.NET-Projekten ist das kein Problem. – RaYell

Antwort

2

Ich bin hier in die gleichen Probleme läuft. Das loginstatus-Steuerelement außerhalb des loginview-Steuerelements funktioniert wie gewünscht. Es scheint albern, dass es nicht im Loginview-Steuerelement funktioniert.

EDIT ** OK, also habe ich ausgelassen, dass ich diese Seite in Sitecore baute. Offenbar irgendwie Sitecores meddels mit dem Loginview-Steuerelement und muss in der web.config den folgenden Abschnitt hinzugefügt:

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

Thank some other guy...

-Victor F.

+0

hat auch für mich funktioniert, danke für die Lösung! – Mark

0

Haben Sie versucht, Ihre LogoutAction zu LogoutAction="RedirectToLoginPage" zu ändern? Normalerweise kann .NET das Löschen des Cookies durchführen, wodurch das Ereignis OnLoggingOut nicht benötigt wird.

1
FormsAuthentication.SignOut() 
FormsAuthentication.RedirectToLoginPage() 

Auch haben Sie Formularauthentifizierung in der richtigen Weise verwendet ich meine, haben Sie eine Web-Konfiguration in innere Verzeichnisse?

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

1

ich das gleiche Problem erlebe. Aber meine Lösung bestand darin, das loginstatus-Steuerelement für ein Hyperlink-Steuerelement auszuwechseln und den Hyperlink zu meiner Homepage mit einem angehängten querystring-Parameter wie "logout = true" navigieren zu lassen und dann auf meiner Homepage Request.QueryString nach dem Wert und nach obigem zu überprüfen ist nicht null das tun dies.

FormsAuthentication.SignOut(); 
Verwandte Themen