在asp.net的masterpage中显示会话状态

时间:2014-03-02 02:11:46

标签: c# asp.net session

我正在设计一个网站,有常见的表格,如登录,注销,注册,母版页等。我在用户登录时保持会话。如果用户登录,我想在主页面的菜单栏上显示注销否则应该显示登录和注册新菜单。但是,无论用户是否登录,都不会显示注销菜单。任何帮助都会感激不尽。

登录代码:

 protected void Button1_Click(object sender, EventArgs e)
    {
        String pass=TextBox2.Text;
                SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\aayush\\Documents\\Visual Studio 2010\\WebSites\\JustDial\\App_Data\\Database.mdf';Integrated Security=True;User Instance=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("select * From shop where shop_email = @param1", con);       
        cmd.Parameters.AddWithValue("@param1", TextBox1.Text);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {

            String pass2 = dr["shop_password"].ToString();
            if (pass.Equals(pass2))
            {
                Session["email"] = dr["shop_email"].ToString();
                Response.Redirect("home.aspx");            
            }
            else {
                TextBox1.Text = "";
                TextBox2.Text = "";
                Label1.Text = "Invalid email id or password";         
             }

        }

        dr.Close();
        con.Close();
    }
}

和母版页中的菜单条形码:

<ul>
   <li><a href='home.aspx'><span>Home</span></a></li>
   <li><a href='about.aspx'><span>About</span></a></li>
   <li><a href='feedback.aspx'><span>Feedback</span></a></li>
   <li><a href='contact.aspx'><span>Contact</span></a></li>
   <%
       if (Session["email"] is bool && (bool)Session["email"])

       {%>

        <li><a href='logout.aspx'><span>Logout</span></a></li>

       <% }

       else {%>

        <li><a href='login.aspx'><span>Login</span></a></li>
     <li class='last'><a href='addShop.aspx'><span>Register</span></a></li>
       <%
       }

        %>

</ul>

1 个答案:

答案 0 :(得分:1)

我要做的第一件事就是停止向你的asp.net页面添加<% %>。这是我们以前在经典ASP中所做的事情。您不应该经常在ASP.NET中执行此操作。

<li>标记换行到面板中。

<asp:Panel id="pnlLogOut" runat="server">
   <li><a href='logout.aspx'><span>Logout</span></a></li>
</asp:Panel>

然后在您的代码中,您可以显示它。

if (Session["email"] is bool && (bool)Session["email"])
    pnlLogOut.Visible = true; 

通过这种方式,您可以在后面的代码中轻松调试会话中的内容。

更改你的if语句,Session [“email”]不是布尔值。

自:

if (Session["email"] is bool && (bool)Session["email"])

要:

if (Session["email"] != null )