2010-08-11 3 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. Нажав на ссылку выхода из системы, пользователь возвращается в форму входа (как форма входа, так и выход из системы являются частью одного и того же элемента управления пользователя), но если я обновляю страницу, пользователь все равно выполнил вход.

Я заметил, что если я переведу Контроль LoginStatus за пределами LoginView, а затем выход из системы работает так, как ожидалось. Я также заметил, что когда LoginStatus находится внутри LoginView, он не создает событие loggingout.

Есть ли у кого-нибудь идеи, что может быть проблемой?

+0

У меня есть точно такая же проблема. У меня есть элемент управления LoginStatus в LoggedInTemplate и он не запускает событие LoggingOut. Я не уверен, правильно ли их вложить. Кажется, что при обратной передаче (при нажатии на ссылку «Выход») элемент управления LoginStatus больше не является частью страницы, поэтому он не запускает событие. – e36M3

+0

Weird ... Я попробовал ту же самую настройку, что и вы, в приложении .NET 4.0. Я ушел, и у меня нет этой проблемы ... Используете ли вы Ajax или что-то подобное на странице? Попытайтесь сделать это в новом проекте, чтобы увидеть, всегда ли это делается. Используете ли вы Visual Studio Devlopement Server или используете IIS? Dunno, если это может что-то изменить, но это только потому, что я хочу попытаться сделать мой проект похожим на вас как можно больше. –

+0

Оказалось, что проблема Sitecore (хотя я не упоминал, что я использую это в Sitecore), и в обычном проекте ASP.NET это не проблема. – RaYell

ответ

2

Я бегу в одних и тех же вопросов здесь. Элемент управления loginstatus за пределами элемента управления loginview работает по желанию. Кажется глупым, что он не будет работать в элементе управления loginview.

EDIT ** ОК, поэтому я забыл, что строил эту страницу в Sitecore. Видимо Sitecore как-то meddels с контролем LoginView и должны быть добавлены к следующему разделу в web.config:

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

Thank some other guy...

-Victor F.

+0

тоже работал для меня, спасибо за отправку решения! – Mark

0

Вы пытались сменить свой LogoutAction на LogoutAction="RedirectToLoginPage"? Обычно я разрешаю .NET обрабатывать cookie, что делает событие OnLoggingOut не необходимым.

1
FormsAuthentication.SignOut() 
FormsAuthentication.RedirectToLoginPage() 

Также вы использовали аутентификацию формы надлежащим образом, я имею в виду, вы указали веб-конфигурацию во внутренних каталогах?

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

1

Я испытываю такую ​​же проблему. Но мое решение состояло в том, чтобы поменять элемент управления loginstatus для элемента управления гиперссылкой и переместить гиперссылку на мою домашнюю страницу с параметром querystring, прикрепленным как «logout = true», а затем на моей домашней странице проверьте Request.QueryString для значения, и если это не является нулевым, сделайте это.

FormsAuthentication.SignOut();