You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Page_Load中禁用特定LI元素的ASP.NET技术问题咨询

问题场景

我有一个全站通用的ASP.NET母版页,其中包含用户导航菜单,需要在Page_Load事件中根据当前登录用户状态,禁用「用户信息/修改密码」这个菜单项(无登录时不可点击)。

菜单的HTML结构如下:

<ul class="nav navbar-top-links navbar-right">
  <li class="dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
      <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i>
      <asp:Label runat="server" ID="lblUserName" Text="User Name Here" />
    </a>
    <ul class="dropdown-menu dropdown-user">
      <li>
        <a href="ChangeLoggedInUserPassword.aspx" runat="server" id="UserInfoLink">
          <i class="fa fa-user-md fa-fw"></i>
          <asp:Label runat="server" ID="UserInfoStatement" Text=" User information/change password" />
          <!-- 想要禁用这个菜单项 -->
        </a>
      </li>
      <li>
        <a href="login.aspx">
          <i class="fa fa-sign-out fa-fw"></i>
          <asp:Label runat="server" ID="LogoutLabel" Text=" Logout" />
        </a>
       </li>
     </ul>
   </li>
 </ul>

我在Page_Load中编写了逻辑,但调试时逻辑符合预期,页面加载后该菜单项仍可点击。尝试禁用UserInfoStatement和UserInfoLink都无效,给UserInfoLink添加OnClick仅支持客户端JS,想知道还有哪些可行方案。

后台VB代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim greetingText As String = "Hello "
        Dim userName As String = "Guest"
        Try
            Dim currentTime As DateTime = DateTime.Now
            Select Case currentTime.Hour
                Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
                    greetingText = "Good Morning, "
                Case 12, 13, 14, 15, 16, 17
                    greetingText = "Good Afternoon, "
                Case 18, 19, 20, 21, 22, 23
                    greetingText = "Good Evening, "
            End Select
            Dim memberUser As MembershipUser = Membership.GetUser()
            If memberUser Is Nothing Then
                greetingText = "Please Sign In"
                userName = ""
                UserInfoStatement.Enabled = False
                UserInfoStatement.ForeColor = Drawing.Color.Gray
                LogoutLabel.Text = " Login"
            Else
                UserInfoStatement.Enabled = True
                UserInfoStatement.ForeColor = Drawing.Color.Black
                LogoutLabel.Text = " Logout"
            End If
            Try
                userName = memberUser.UserName
            Catch ex As Exception
                Log(String.Format("Navbar error getting user name: {0}", ex))
            End Try
        Catch ex As Exception
            Log(String.Format("Navbar error creating greeting string: {0}", ex))
        End Try
    End If
End Sub
可行解决方案

方案1:修改链接属性并添加禁用样式

ASP.NET的<a runat="server">禁用时不会自动阻止跳转,可直接修改链接地址并添加CSS禁用样式,既阻止跳转又直观提示用户:

在后台无登录判断分支中添加:

UserInfoLink.Href = "#"
UserInfoLink.Style.Add("pointer-events", "none")
UserInfoLink.Style.Add("color", "#ccc")

登录状态恢复时还原:

UserInfoLink.Href = "ChangeLoggedInUserPassword.aspx"
UserInfoLink.Style.Remove("pointer-events")
UserInfoLink.Style.Remove("color")

方案2:替换为asp:LinkButton控件

将原有<a runat="server">替换成asp:LinkButton,该控件的Enabled属性会直接生效,自动阻止点击:

修改前端代码:

<li>
    <asp:LinkButton runat="server" ID="UserInfoLink" PostBackUrl="ChangeLoggedInUserPassword.aspx">
        <i class="fa fa-user-md fa-fw"></i>
        <asp:Label runat="server" ID="UserInfoStatement" Text=" User information/change password" />
    </asp:LinkButton>
</li>

后台直接设置状态:

' 无登录时
UserInfoLink.Enabled = False
UserInfoLink.ForeColor = Drawing.Color.Gray

' 登录时
UserInfoLink.Enabled = True
UserInfoLink.ForeColor = Drawing.Color.Black

方案3:直接隐藏菜单项(可选)

如果不需要给未登录用户展示该选项,可直接隐藏整个列表项:

给<li>添加服务器端属性:

<li runat="server" ID="UserInfoLi">
    <a href="ChangeLoggedInUserPassword.aspx" runat="server" id="UserInfoLink">
        <!-- 内容不变 -->
    </a>
</li>

后台判断控制可见性:

' 无登录时
UserInfoLi.Visible = False

' 登录时
UserInfoLi.Visible = True

内容的提问来源于stack exchange,提问作者Michael Foster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:17:02