Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置菜单项单击事件以调用注销函数_C#_Asp.net_Menuitem_Logout - Fatal编程技术网

C# 设置菜单项单击事件以调用注销函数

C# 设置菜单项单击事件以调用注销函数,c#,asp.net,menuitem,logout,C#,Asp.net,Menuitem,Logout,我有一个菜单项“Login”,可以导航到登录页面。当用户登录时,我将该菜单项的文本更改为“注销”。单击后,我希望它返回以清除会话,转到登录页面,并将文本更改回“登录”。这很有效……有点。我遇到的问题是,我不知道在单击菜单项时如何调用函数,因此当用户单击“注销”时,登录页面将加载,并且在页面加载时会话将被清除,但由于在页面加载之前没有清除,因此仍然显示有会话(用户名仍然显示,并且菜单项文本没有更改). 如何设置它,以便在单击“注销”时而不是在加载登录页面时清除会话 这是我的菜单代码: <%

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

这是我的菜单代码:

<%@ 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)
        {
            Session.Abandon();
            Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetNoStore();

        }
    }

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

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

除非我做错了(很可能)OnInit对我不起作用<代码>public new void OnInit(EventArgs e){if(Session[“SessionUserName”]!=null){Session.adward();Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));Response.Cache.SetCacheability(HttpCacheability.NoCache);Response.Cache.SetNoStore()}我试图使用override而不是new,但由于我没有任何可重写的内容,所以出现了错误。OnInit看起来根本没有被调用。OnInit总是被调用。我认为你需要保护这个方法。示例:受保护的重写void OnInit(EventArgs e){…}确定。所以这起作用了…大部分。我也有同样的问题,但我可能无法改变这一点。会话将被清除,但菜单项的文本不会变回“登录”。我可能需要告诉它更改回去,但是由于菜单控件的代码中的文本已更改,我想我无法更改它。现在,在我注销并清除会话后,如果我再次单击任何菜单项,文本确实会更改。只是用户实际注销时没有。我想我只是在代码中找到了缺少的部分:-)您必须调用会话。另外清除。放弃将只删除客户端浏览器中的cookie,afaik。成功了!非常感谢你!除非我做错了(这很可能),否则它对我不起作用<代码>public new void OnInit(EventArgs e){if(Session[“SessionUserName”]!=null){Session.adward();Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));Response.Cache.SetCacheability(HttpCacheability.NoCache);Response.Cache.SetNoStore()}我试图使用override而不是new,但由于我没有任何可重写的内容,所以出现了错误。OnInit看起来根本没有被调用。OnInit总是被调用。我认为你需要保护这个方法。示例:受保护的重写void OnInit(EventArgs e){…}确定。所以这起作用了…大部分。我也有同样的问题,但我可能无法改变这一点。会话将被清除,但菜单项的文本不会变回“登录”。我可能需要告诉它更改回去,但是由于菜单控件的代码中的文本已更改,我想我无法更改它。现在,在我注销并清除会话后,如果我再次单击任何菜单项,文本确实会更改。只是用户实际注销时没有。我想我只是在代码中找到了缺少的部分:-)您必须调用会话。另外清除。放弃将只删除客户端浏览器中的cookie,afaik。成功了!非常感谢你!
 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();

        }
    }