1

i can't access to a li control in my master page, i need to set it visible = false when user isn't "admin", with runat = "server" i can't access from code, why? how can i solve this problem? aspx

<li runat="server" id="tabadmin"><a runat="server" href="~/DatiInterni.aspx" >Amministrazione sito</a></li>

aspx.cs

if (Context.User.Identity.Name != "admin")
{
    HtmlGenericControl li = (HtmlGenericControl) FindControl("tabadmin");
    li.Attributes.Add("Visible", "false");

}

login view

<asp:LoginView runat="server" ViewStateMode="Disabled">   
    <AnonymousTemplate>
        <ul class="nav navbar-nav navbar-right">
        <li><a runat="server" href="~/Account/Login" title="Login">Accedi</a></li>
          <li><a runat="server" href="~/Account/Register" title="Register">Registrati</a></li>  
        </ul>
    </AnonymousTemplate>
     <%--Lato destro della navbar se l'utente si è autenticato--%>
    <LoggedInTemplate>
        <ul class="nav navbar-nav navbar-right"  runat="server">
         <li><a runat="server" href="~/Account/Manage" title="Manage your account">Ciao, <%: Context.User.Identity.GetUserName()  %> </a></li>
        <li class="dropdown">
      <a class="dropdown-toggle" data-toggle="dropdown" href="#">Menu
      <span class="caret"></span></a>
      <ul class="dropdown-menu" runat="server" id="menu">
        <li><a href="/Apparati.aspx">Dati clienti</a></li>
        <li><a href="/DatiInterni.aspx">Dati interni</a></li>
     <li runat="server" id="tabadmin"><a runat="server" href="~/DatiInterni.aspx" >Amministrazione sito</a></li>
     <li>
        <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Disconnetti" LogoutPageUrl="/Account/Login.aspx" OnLoggingOut="Unnamed_LoggingOut" />
    </li>
      </ul>
    </li>
        </ul>
    </LoggedInTemplate>
</asp:LoginView>
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
Emanuele
  • 41
  • 11

1 Answers1

1

Solved with this code

            <asp:LoginView runat="server" ViewStateMode="Disabled" ID="LogSection">


                <AnonymousTemplate>
                    <ul class="nav navbar-nav navbar-right">
                    <li><a runat="server" href="~/Account/Login" title="Login">Accedi</a></li>
                      <li><a runat="server" href="~/Account/Register" title="Register">Registrati</a></li>  
                    </ul>
                </AnonymousTemplate>
                 <%--Lato destro della navbar se l'utente si è autenticato--%>
                <LoggedInTemplate>
                    <ul class="nav navbar-nav navbar-right"  runat="server">
                     <li><a runat="server" href="~/Account/Manage" title="Manage your account">Ciao, <%: Context.User.Identity.GetUserName()  %> </a></li>
                    <li class="dropdown" id="menu" runat="server">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">Menu
                  <span class="caret"></span></a>
                  <ul class="dropdown-menu" runat="server" id="list" >
                    <li><a href="/Apparati.aspx">Dati clienti</a></li>
                    <li><a href="/DatiInterni.aspx">Dati interni</a></li>
                 <li runat="server" id="tabadmin" visible="true"><a runat="server" href="~/Admin/Administration.aspx" >Amministrazione sito</a></li>
                                                    <li>
                            <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Disconnetti" LogoutPageUrl="/Account/Login.aspx" OnLoggingOut="Unnamed_LoggingOut" />
                        </li>
                  </ul>
                </li>
                    </ul>
                </LoggedInTemplate>
            </asp:LoginView>

code behind

    if (Context.User.Identity.Name != "admin" && Context.User.Identity.Name != "")
    {
        HtmlGenericControl menu = (HtmlGenericControl)LogSection.FindControl("menu");
        HtmlGenericControl list = (HtmlGenericControl)menu.FindControl("list");
        HtmlGenericControl li = (HtmlGenericControl)list.FindControl("tabadmin");
        li.Visible = false;
    }
Emanuele
  • 41
  • 11
  • 1
    Don't post the code in the answer like this! If you want to add something, you need to edit your question. – walther Nov 14 '17 at 12:57
  • But i'm fairly sure that you don't need the `list` to find the `li`, the `NamingContainer` of it is the `LogSection`, so it should work already if you use `(HtmlGenericControl)LogSection.FindControl("tabadmin")` – Tim Schmelter Nov 14 '17 at 14:29
  • @TimSchmelter i've tried with only (HtmlGenericControl)LogSection.FindControl("tabadmin") but it didn't work, with menu and list it works – Emanuele Nov 16 '17 at 09:03