0

当用户登录时,他们的会话设置如下:

HttpContext.Current.Session["LoggedIn"] = true;
HttpContext.Current.Session["FullName"] = (string)Reader["FirstName"] + " " + (string)Reader["LastName"];

我的Site.master文件包含一个站点范围的导航菜单,我想根据用户是否登录来更改它以显示不同的链接。

像这样的东西Site.master

<div id="navigation">
    <ul>
    <% 
        if (HttpContext.Current.Session["LoggedIn"] != null)
        {
            %><li><a href="/user74/aspnet/Logout.aspx">Log out</a></li><%
        }
        else
        {
            %>
                <li><a href="/user74/aspnet/Register.aspx">Register</a></li>
                <li><a href="/user74/aspnet/Login.aspx">Log in</a></li>
            <%
        }
    %>
    </ul>
</div>

但是,这似乎不起作用。看起来你不能像 PHP 标签一样使用 ASP 标签。

我怎样才能做到这一点?

4

2 回答 2

0

首先,我建议您使用ASP.NET 身份验证来对用户进行身份验证,而不是使用 Session。这带来了许多好处,例如基于角色的安全性等。

您可以对用户进行身份验证

  • 窗户(默认)
  • 形式
  • 护照

使用其中一种身份验证方法后,您可以使用LoginView控件为不同的用户集呈现不同的 HTML。有关详细信息,您可以查看ASP.NET 提示:使用 LoginView 控件

于 2012-11-15T05:28:01.070 回答
0

似乎您更喜欢 PHP,对于初学者,我建议您使用普通的 .NET 进程

1.在aspx页面中写入HTML,用asp:linkbutton替换HTML'a',likr

<div id="navigation">
 <ul>
  <li><asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl="/user74/aspnet/Logout.aspx">Log out</asp:LinkButton></li>
 </ul>
</div>

2.在 pagename.aspx.cs 页面中编写代码,在您的情况下,在 page_load 事件中编写会话检查

protected void Page_Load(object sender, EventArgs e)
{
    if (HttpContext.Current.Session["LoggedIn"] != null)
    {
        LinkButton1.Visible = true;
    }
}
于 2012-11-15T05:34:43.743 回答