I do not want to set the visibility property, because it makes my code dirty and it's not convenient. Suppose I have a Default.aspx page and there are 3 roles:
- Admin
- A
- B
In the Default.aspx page I want to show contents based on user roles,so I use Loginview and it's Templates as shown below:
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:LoginView runat="server" ID="loginviewControl1">
<AnonymousTemplate>
<asp:HyperLink runat="server" ID="lnkLogin" Text="Log In" NavigateUrl="~/Account/Login.aspx"></asp:HyperLink>
<Anonymous:AnonymousPart ID = "anonym" runat="server" />
</AnonymousTemplate>
<LoggedInTemplate>
<asp:Label runat="server" ID="WelcomeBackMessage"></asp:Label>
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
<Admin:AdminPart ID ="adminContent" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="A">
<ContentTemplate>
<RoleA:RoleAPart ID = "RoleAContent" runat="server"/>
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="B">
<ContentTemplate>
<RoleB:RoleBPart ID = "RoleBContent" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
</asp:Content>
RoleB:RoleBPart
, RoleA:RoleAPart
, and Admin:AdminPart
are userControls.
Here is my CS file code:
protected void Page_Load(object sender, EventArgs e)
{
}
I think it is better than setting visibility because sometimes it gets difficult to handle it. When user with role A logged in the only content which is displayed is RoleA:RoleAPart part.