【问题标题】:Session in master page asp.net母版页 asp.net 中的会话
【发布时间】:2014-04-28 11:30:32
【问题描述】:

我的母版页包含 loginlogout 按钮。

session["Userid"] 为空时,我希望它可见和不可见。

我该怎么做?

我知道如何让可见和不可见

  • 代码是:

    protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //string s = Session["UserId"].ToString();
            if (Session["UserId"] != null)
            {
                divLogin.Visible = true;
                divLogout.Visible = false;
            }
            else
            {
    
                divLogin.Visible = false;
                divLogout.Visible = true;
            }
    
    
        }
    

    请帮忙。

  • 【问题讨论】:

    • 你当前的代码表现如何?
    • 在jquery上勾选然后代表这个隐藏显示
    • 你不能混合和匹配客户端和服务器端,所以使用 Jquery 是不正确的。看来这里的逻辑是颠倒的。当 session 为 null 时,它会显示注销 div - 它应该被反转
    • 似乎没人问过的快速问题,Session["UserId"] 正在设置吗?您是否尝试过将其从 OnInit 方法移到 Page_Load 方法中?

    标签: c# asp.net asp.net-mvc session master-pages


    【解决方案1】:

    您也可以使用此 HTML 代码实现此目的。试试吧,

    <div id="divLogin" style="display: <%= Session["UserId"]!=null ? "none" : "block" %>">Your Login content</div>
    <div id="divLogout" style="display: <%= Session["UserId"]==null ? "none" : "block" %>">Your Logout content</div>
    

    【讨论】:

    • 不工作意味着什么?您收到“注销内容”或收到错误消息?
    【解决方案2】:

    您必须为 div 设置runat="server"

    <div id="divLogin" runat="server"></div>
    

    代码背后

    divLogin.visible=false;
    

    【讨论】:

  • 我已经做到了!但不工作..我想在 sessionn 中有一些好的东西.. 登录后我没有得到会话值。
  • visible 应替换为 Visible
  • 【解决方案3】:

    使用 OnPreRender 函数中的逻辑,因为用户登录和注销总是在母版页调用 OnInit 之后发生。因此,在刷新期间您将获得正确的值,但不是第一次。

    MSDN你可以找到以下信息

    母版页的行为类似于页面上的子控件:母版页 Init 事件发生在页面 Init 和 Load 事件之前,而母版页 Load 事件发生在页面 Init 和 Load 事件之后。

    我认为(很可能)您正在登录页面的 buttonClick 事件处理程序中设置用户的登录信息,该处理程序在母版页的 OnInit 之后被调用。所以当主页面的 OnInit 被执行时,Session 已经包含了之前的状态(登录时为空,注销时用户信息)

    即使Master页面上提供了登录控件和登录按钮,最好在PreRender事件中提供这个逻辑。


    很高兴为您提供帮助!如果您觉得有帮助,请记得采纳答案。

    【讨论】:

    • 如果反对者能提供一个理由,我将不胜感激。顺便说一句,我已经扩展了我的答案以包含更多信息
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签