2012-04-14 8 views
1

ruft ich einen Menüpunkt „Login“, die auf die Login-Seite navigiert. Wenn ein Benutzer angemeldet ist, wird der Text für diesen Menüeintrag auf "Abmelden" geändert. Wenn ich darauf klicke, gehe ich zurück, um die Sitzung zu löschen, gehe zur Anmeldeseite und versuche, den Text wieder in "Login" zu ändern. Und das funktioniert ... irgendwie. Das Problem, das ich habe ist, dass ich nicht weiß, wie man eine Funktion aufzurufen, wenn auf einen Menüpunkt klicken, so dass, wenn der Benutzer klickt auf „Logout“ die Login-Seite geladen wird, und die Sitzung wird beim Laden der Seite gelöscht, aber da es Wird vor dem Laden der Seite noch nicht gelöscht, scheint es immer noch eine Sitzung zu geben (der Benutzername wird immer noch angezeigt und der Menüpostentext wird nicht geändert). Wie kann ich es so einstellen, dass die Sitzung in "Abmelden" geklickt wird und nicht wenn die Anmeldeseite geladen wird?Set MenuItem Ereignis klicken Abmeldefunktion

Hier ist mein Menü Code:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LeftSideMenu.ascx.cs" Inherits="EVMAnywhereWeb.Controls.LeftSideMenu" %> 

<div id="leftSideMenu"> 
<asp:menu ID="menu1" runat="server" Orientation="Vertical" RenderingMode="List"> 
<StaticMenuItemStyle VerticalPadding="5" /> 
<DynamicMenuItemStyle VerticalPadding="5" /> 
<Items> 
    <asp:menuitem navigateurl="~/Login.aspx" Text="Login" Value="Login"></asp:menuitem> 
    <asp:menuitem navigateurl="~/Register.aspx" Text="Register" Value="Register"></asp:menuitem> 
    <asp:menuitem navigateurl="~/Projects.aspx" Text="Projects" Value="Projects"></asp:menuitem> 
    <asp:menuitem navigateurl="~/Dictionary.aspx" Text="Dictionary" Value="Dictionary"></asp:menuitem> 
</Items> 
</asp:menu> 
</div> 

Hier ist der Code verwende ich den Text ändern (im Code-behind):

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["SessionUserName"] != null) 
     { 
      menu1.Items[0].Text = "Logout"; 
      menu1.Items[1].Text = "My Account"; 

     } 
    } 

Und in der Login-Seite Code-behind, I Löschen Sie die Sitzung:

Antwort

1

Rufen Sie Ihren Code, um die Sitzung in OnInit statt Page_Load zu löschen.

+0

Wenn ich das falsch mache (was wahrscheinlich ist) OnInit für mich nicht funktioniert. 'Öffentlichkeit neue Leere OnInit (EventArgse) { if (Session [ "SessionUserName"]! = Null) { Session.Abandon(); Response.Cache.SetExpires (DateTime.UtcNow.AddMinutes (-1)); Response.Cache.SetCacheability (HttpCacheability.NoCache); Response.Cache.SetNoStore(); } } ' Ich versuchte Überschreibung statt neuen zu verwenden, aber der Fehler begangen, weil ich nichts hatte außer Kraft zu setzen. OnInit scheint einfach nicht aufgerufen zu werden. –

+0

OnInit wird immer aufgerufen. Ich denke, du musst die Methode schützen. Beispiel: Geschützte Überschreibung void OnInit (EventArgs e) {...} –

+0

Ok. Das hat also meistens funktioniert. Ich habe jedoch das gleiche Problem, und ich kann das vielleicht nicht ändern. Die Sitzung wird gelöscht, aber der Text für den Menüeintrag wechselt nicht zurück zu "Login". Ich muss es wahrscheinlich ändern, aber da der Text im Code für die Menüsteuerung geändert wird, glaube ich nicht, dass ich ihn ändern kann. Nachdem ich mich abgemeldet habe und die Sitzung beendet ist, wird der Text geändert, wenn ich erneut auf einen der Menüpunkte klicke. Nur nicht, wenn sich der Benutzer abmeldet. –