2012-04-14 10 views
1

ログインページに移動するメニュー項目「ログイン」があります。ユーザーがログインすると、そのメニュー項目のテキストが「ログアウト」に変わります。クリックすると、セッションをクリアしてログインページに戻り、テキストを「ログイン」に戻すことができます。そして、この作品...ちょっと。私が抱えている問題は、メニュー項目をクリックするときに関数を呼び出す方法がわからないため、ユーザーが「ログアウト」をクリックするとログインページが読み込まれ、ページが読み込まれるとセッションがクリアされますページがロードされる前にクリアされていない場合でも、セッションが存在する(ユーザー名はまだ表示され、メニュー項目のテキストは変更されません)。ログインページが読み込まれたときではなく、「ログアウト」でセッションがクリアされるように設定するにはどうすればよいですか?MenuItemクリックイベントを設定してログアウト機能を呼び出す

ここに私のメニューコードがあります:

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

ここで私は(コードビハインドで)テキストを変更するために使用するコードです:

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

     } 
    } 

、ログインページのコードビハインドでは、私はセッションをクリアするためにこれを持っている:

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (Session["SessionUserName"] != null) 
     { 
      Session.Abandon(); 
      Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
      Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      Response.Cache.SetNoStore(); 

     } 
    } 

答えて

1

はのOnInitの代わりをPage_Loadでセッションをクリアするためにあなたのコードを呼び出します。

+0

私はこれが間違っている(間違っている)場合を除き、OnInitは私のために働いていません。 '(セッション[" SessionUserName "]!= null) { Session.Abandon(); Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); } } 私は新しいものの代わりにオーバーライドを使用しようとしましたが、オーバーライドするものがなかったのでエラーが発生しました。 OnInitはまったく呼び出されていないようです。 –

+0

OnInitは常に呼び出されます。あなたはメソッドを保護されたものにする必要があると思います。 例: 保護されたオーバーライドvoid OnInit(EventArgs e){...} –

+0

[OK]をクリックします。それがうまくいった...ほとんど。私は同じ問題を抱えていますが、私はそれを変えることができないかもしれません。セッションはクリアされていますが、メニュー項目のテキストは「ログイン」に戻っていません。私はおそらくそれを変更するように指示する必要がありますが、テキストがメニューコントロールの背後にあるコードで変更されているので、私はそれを変更できるとは思いません。さて、ログアウトしてセッションをクリアした後、メニュー項目のいずれかを再度クリックすると、テキストが変わります。ユーザーが実際にログアウトしたときだけではありません。 –

関連する問題