2010-08-11 23 views
10

Tengo un LoginView en mi aplicación APS.NET con AnonymousTemplate y LoggedInTemplate. He puesto el control LoginStatus dentro de LoggedInTemplate pero no funciona como se esperaba.ASP.NET LoginStatus dentro de LoginView no desencadena el evento LoggingOut

Aquí está el código

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

Todos los controladores de eventos están correctamente definidos en el código detrás de archivo.

El problema es que si el usuario inicia sesión, verá su nombre de usuario con el enlace de desconexión del control de LoginStatus. Al hacer clic en el enlace, el usuario vuelve al formulario de inicio de sesión (tanto el inicio de sesión como el cierre de sesión forman parte del mismo control de usuario). Si actualizo la página, el usuario aún está conectado.

Me he dado cuenta de que si me muevo El control LoginStatus fuera del proceso de inicio de sesión de LoginView luego funciona como se esperaba. También noté que cuando LoginStatus está dentro de LoginView, no genera un evento de inicio de sesión.

¿Alguien tiene alguna idea de lo que podría ser el problema?

+0

En realidad tengo exactamente el mismo problema. Tengo un control LoginStatus en LoggedInTemplate y no desencadena el evento LoggingOut. No estoy seguro de si es válido anidarlos así. Parece que en la devolución (al hacer clic en el enlace Cerrar sesión) el control LoginStatus ya no forma parte de la página, por lo tanto, no activa el evento. – e36M3

+0

Extraño ... He intentado exactamente la misma configuración que tú en una aplicación en .NET 4.0 que he procesado y no tengo este problema ... ¿Estás usando Ajax o algo así en la página? Intente hacer esto en un nuevo proyecto para ver si siempre lo hace. ¿Estás usando Visual Studio Devlopement Server o estás usando IIS? No sé si puede cambiar algo, pero es solo porque quiero intentar que mi proyecto se vea como el suyo tanto como sea posible. –

+0

Resultó ser un problema de Sitecore (aunque no he mencionado que estoy usando eso en Sitecore) y en un proyecto ASP.NET normal esto no es un problema. – RaYell

Respuesta

2

estoy corriendo en los mismos problemas aquí. El control de estado de inicio de sesión fuera del control de inicio de sesión funciona como lo desee. Parece una tontería que no funcione dentro del control de inicio de sesión.

EDITAR ** OK, así que dejé claro que estaba construyendo esta página en Sitecore. Al parecer Sitecore alguna manera meddels con el control LoginView y debe agregarse a la siguiente sección en el web.config:

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

Thank some other guy...

-Víctor F.

+0

funcionó para mí también, ¡gracias por publicar la solución! – Mark

0

¿Has intentado cambiar tu LogoutAction por LogoutAction="RedirectToLoginPage"? Normalmente dejo que .NET maneje borrar la cookie, lo que hace que el evento OnLoggingOut no sea necesario.

1
FormsAuthentication.SignOut() 
FormsAuthentication.RedirectToLoginPage() 

También ha utilizado la autenticación de formulario de manera adecuada, es decir, ¿ha puesto una configuración web en los directorios internos?

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

1

estoy experimentando el mismo problema. Pero mi solución fue cambiar el control de estado de inicio de sesión para un control de hipervínculo y hacer que el hipervínculo navegue a mi página de inicio con un parámetro de cadena de consulta conectado como "logout = true" y luego en mi página de inicio compruebe Request.QueryString para el valor y si no es nulo el hacer esto.

FormsAuthentication.SignOut(); 
Cuestiones relacionadas