2010-08-11 53 views
10

我有一个LoginView在我的APS.NET应用程序中使用AnonymousTemplate和LoggedInTemplate。我已将LoginStatus控件放入LoggedInTemplate中,但不能按预期工作。ASP.NET LoginStatus里面的LoginView不会触发LoggingOut事件

这里的所有事件处理程序代码中正确定义代码隐藏文件

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

问题是,如果用户登录,他将从LoginStatus控件的登出链接看到他的用户名。点击注销链接后,用户返回登录表单(登录和注销表单都是同一用户控件的一部分),但是如果刷新页面,用户仍然登录。

我注意到如果我移动LoginView之外的LoginStatus控件,然后注销过程按预期工作。我也注意到,当LoginStatus在LoginView中时,它不会引发一个登出事件。

有没有人有任何想法可能是什么问题?

+0

我其实有完全相同的问题。我在LoggedInTemplate中有一个LoginStatus控件,它不会触发LoggingOut事件。我不确定是否可以像这样嵌套它们。看起来在回发(当单击注销链接时),LoginStatus控件不再是页面的一部分,因此它不会触发事件。 – e36M3 2010-10-14 17:18:30

+0

奇怪......我已经尝试了与.NET 4.0中的应用程序完全相同的设置,我已经完成了maded,并且我没有这个问题......您是使用Ajax还是类似于页面上的东西?尝试在一个新项目上做这件事,看看它是否总是这样做。您是使用Visual Studio Devlopement Server还是使用IIS?不知道它是否可以改变某些东西,但这只是因为我想尽可能让我的项目看起来像你的。 – 2011-03-03 21:34:28

+0

原来是Sitecore问题(尽管我没有提到我在Sitecore上使用它),而在正常的ASP.NET项目中这不是问题。 – RaYell 2011-08-28 07:51:16

回答

2

我遇到了同样的问题在这里。 loginview控件之外的loginstatus控件按照需要工作。它似乎很傻,它不会在loginview控件中工作。

编辑** 好吧,所以我遗漏了我正在Sitecore中构建此页面。显然Sitecore的某种方式LoginView控件meddels,必须加入到web.config中的以下部分:

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

Thank some other guy...

-Victor F.

+0

也为我工作,感谢张贴解决方案! – Mark 2014-02-10 00:07:01

0

您是否试过将LogoutAction更改为LogoutAction="RedirectToLoginPage"?我通常会让.NET处理清除Cookie,这使得事件不再需要。

1
FormsAuthentication.SignOut() 
FormsAuthentication.RedirectToLoginPage() 

你是否也以适当的方式使用表单身份验证我的意思是你在内部目录中放置了web配置?

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

1

我遇到了同样的问题。但我的解决方案是换出超链接控件的loginstatus控件,并使超链接导航到我的主页,并附带一个querystring参数,如“logout = true”,然后在我的主页上检查Request.QueryString的值,如果它这不是无效的。

FormsAuthentication.SignOut();