【问题标题】:HTML control not appearing in Code Behind with ASP.net FormsHTML 控件未出现在 ASP.net 表单的代码隐藏中
【发布时间】:2015-02-01 18:51:19
【问题描述】:

在我的网站母版页上,我有导航代码,其中包含我想要限制其可见性的链接。这是我遇到问题的HTML:

<%@ Master Language="C#" AutoEventWireup="True" CodeBehind="Site.master.cs" Inherits="MAMOnline.Site" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>MAMOnline - <%: Page.Title %></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<asp:ContentPlaceHolder ID="Stylesheets" runat="server">
    <link rel="stylesheet" href="/css/reset.css" type="text/css" />
    <link rel="stylesheet" href="/css/styles.css" type="text/css" />
</asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server">
        <Scripts>
<%--Framework Scripts--%>
            <asp:ScriptReference Name="jquery" />
            <%--Site Scripts--%>

    </Scripts>
</asp:ScriptManager>
<div id="container">

<header> 
<div class="width">

        <h1><a href="/">MAM<strong>Online</strong></a></h1>

    <nav>

            <ul class="sf-menu dropdown">
                <asp:LoginView runat="server" ViewStateMode="Disabled">
                    <LoggedInTemplate>

                        <li class="selected"><a runat="server" href="~/Default.aspx"><i class="fa fa-home"></i> Home</a></li>


                        <li><a runat="server" href="~/MyAccount.aspx"><i class="fa fa-briefcase"></i> My Account</a></li>
                        <li><a runat="server" href="~/Admin/Default.aspx" id="adminLink" Visible="False"><i class="fa fa-briefcase"></i> Administration</a></li>

                        <li><a id="logoutLink" runat="server" href="~/AuthHandler.ashx?logout=true"><i class="fa fa-phone"></i>Log out</a></li>
                    </LoggedInTemplate>
                    </asp:LoginView>
            </ul>

我正在尝试使用 id 为“adminLink”的元素。但是,它不会出现在设计器文件中,并且在 .cs 代码隐藏文件中引用它不起作用。我犯了一个明显的错误吗?

【问题讨论】:

    标签: c# html asp.net code-behind


    【解决方案1】:

    如果您想在文件或设计器的代码中使用 ASP.NET 控件,请尝试更改此设置

    <a runat="server" href="~/Admin/Default.aspx" id="adminLink" Visible="False"><i class="fa fa-briefcase"></i> Administration</a>
    

    <asp:HyperLink runat="server" .... id="adminLink" ..../>
    

    【讨论】:

    • 不幸的是,这不起作用。解决方案是使用LoginView.FindControl("adminLink") 获得对控件的代码访问权限。
    【解决方案2】:

    这是我的解决方案: 控件被重新定位在模板之外,在父控件上设置 runat="server" id="adminLink" 属性

  • <ul class="sf-menu dropdown">
    <li class="selected"><a runat="server" href="~/Default.aspx"><i class="fa fa-home"></i>Home</a></li>
    <li><a runat="server" href="~/MyAccount.aspx"><i class="fa fa-briefcase"></i>My Account</a></li>
    <li runat="server" id="adminLink"><a href="~/Admin/Default.aspx"><i class="fa fa-briefcase"></i>Administration</a></li>
    <asp:LoginView runat="server" ViewStateMode="Disabled">
        <LoggedInTemplate>
            <li><a id="logoutLink" runat="server" href="~/AuthHandler.ashx?logout=true"><i class="fa fa-phone"></i>Log out</a></li>
        </LoggedInTemplate>
    </asp:LoginView>
    

    然后在后面的代码中,您可以为“adminLink”设置可见属性,例如

    adminLink.Visible = Context.User.IsInRole("4");
    
  • 【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      相关资源
      最近更新 更多