BizApps
BizApps

Reputation: 6130

Show/Hide SiteMap Menu/Repeater on MasterPage

Master Page:

<ul>
    <li class="first"><asp:HyperLink runat="server" ID="lnkHome" 
        NavigateUrl="~/Forms/Default.aspx">Home</asp:HyperLink></li>

    <asp:Repeater runat="server" ID="Repeater1" DataSourceID="SiteMapDataSource1" 
        EnableViewState="False">
        <ItemTemplate>
            <li>
                <asp:HyperLink ID="HyperLink1" runat="server" 
                    NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %>
                </asp:HyperLink>
            </li>
        </ItemTemplate>
    </asp:Repeater>
</ul>

Web.SiteMap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

  <siteMapNode id="SiteHome" url="~/Forms/Default.aspx" title="Home"  
        description="Default">
      <siteMapNode id="SiteAbout" url="~/Forms/Aboutus.aspx" title="About us"  
            description="About Us"/>
      <siteMapNode id="SiteNew" url="~/Forms/New.aspx" title="New"  
            description="My Sample Page"/>    
 </siteMapNode>

Design:

HOME | About us | My Sample Page


I am new on ASP.Net Webforms and i am creating my first Project. I am using Repeater to navigate page urls. On my Master/Page.cs Code Behind I need to Hide [My Sample Page] based on my Login Account.

something like:

if(UserGroup="Admin")
{
  //Show My Sample Page
  HOME | About us | My Sample Page 
}
else if(UserGroup="User1") 

{ //Hide About Us HOME | About us } else { // Show Home Only HOME }

How to do it in form Load? Thanks in Regards..

Upvotes: 1

Views: 2494

Answers (2)

Eranga
Eranga

Reputation: 32437

The correct way to do this is define a site map provider in your Web.Config and make sure you set the attribute securityTrimmingEnabled="true".

<siteMap defaultProvider="MySiteMap">
 <providers>
   <clear/>
   <add 
     name="MySiteMap"
     type="System.Web.XmlSiteMapProvider" 
     securityTrimmingEnabled="true" 
     siteMapFile="~/Web.SiteMap" />
 </providers>
</siteMap>

In your Forms folder create a Web.Config file and include the following

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
  <location path="New.aspx">
    <system.web>
      <authorization>       
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
</configuration>

Now ASP.Net will take care of showing which parts of your site map to which users. Eg: In this case it will hide your My Sample Page page from un-authenticated users.

Upvotes: 1

Akram Shahda
Akram Shahda

Reputation: 14771

Try something like:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>'
    Visible='Eval("Title") = "My Sample Page" ? this.IsAdmin.ToString() : "True"' >
    <%# Eval("Title") %>
</asp:HyperLink>

Upvotes: 0

Related Questions