На главной странице моего сайта есть код навигации со ссылками, для которых я хочу ограничить видимость. Вот 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>

Я пробую элемент с идентификатором "adminLink". Однако он не отображается в файле конструктора, и ссылка на него в коде файла .cs не работает. Я делаю очевидную ошибку?

0
user3727001 4 Дек 2014 в 04:31

2 ответа

Если вы хотите использовать элемент управления 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" ..../>
0
display name 4 Дек 2014 в 04:44
1
К сожалению, это не работает. Решение состояло в том, чтобы использовать LoginView.FindControl("adminLink") для получения кода доступа к элементу управления.
 – 
user3727001
5 Дек 2014 в 20:47

Это мое решение: элементы управления перемещены за пределы шаблона, установите свойства 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");
    
    0
    Alejandro Hernández 8 Фев 2015 в 15:16