ログインページに移動するメニュー項目「ログイン」があります。ユーザーがログインすると、そのメニュー項目のテキストが「ログアウト」に変わります。クリックすると、元に戻ってセッションをクリアし、ログインページに移動して、テキストを「ログイン」に戻します。そして、これはうまくいきます...ちょっと。私が抱えている問題は、メニュー項目をクリックしたときに関数を呼び出す方法がわからないことです。そのため、ユーザーが[ログアウト]をクリックすると、ログインページが読み込まれ、ページが読み込まれるとセッションがクリアされます。ページが読み込まれる前にクリアされない場合でも、セッションがあるように見えます(ユーザー名は引き続き表示され、メニュー項目のテキストは変更されません)。ログインページが読み込まれたときではなく、[ログアウト]をクリックしてセッションがクリアされるように設定するにはどうすればよいですか?
これが私のメニューコードです:
<%@ 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();
}
}