设置MenuItem单击事件以调用注销功能

时间:2012-04-14 21:04:30

标签: c# asp.net menuitem logout

我有一个导航到登录页面的菜单项“登录”。当用户登录时,我将该菜单项的文本更改为“注销”。单击时,我希望它返回清除会话,转到登录页面,然后将文本更改回“登录”。这有效......有点儿。我遇到的问题是我不知道如何在单击菜单项时调用函数,因此当用户单击“注销”时,加载登录页面并在页面加载时清除会话,但是因为它是在页面加载之前未清除,仍然显示有会话(用户名仍然显示,菜单项文本未更改)。如何设置它以便在单击“注销”时清除会话而不是在加载登录页面时?

这是我的菜单代码:

<%@ 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 个答案:

答案 0 :(得分:1)

调用您的代码清除OnInit中的会话而不是Page_Load。