ligações exibir dinamicamente usando o ASP.NET LoginView
Pergunta
Estou tendo problemas usando um LoginView para o que eu preciso. Alguém pode me dizer se eu posso fazer isso em um LoginView (e como) ou se eu precisar usar código.
Eu tenho dois papéis - usuários e de administrador. Eu quero mostrar dinamicamente ligações com base na função. Vou escrever o que eu quero em uma instrução if porque é mais fácil de explicar:
if (role = Administrator) //Display only if administrator.
Show Hyperlink 1
Show Hyperlink 2
else
if (role = User) //Display only if user.
Show Hyperlink 3
Show Hyperlink 4
endif
//Display these if a user or if non-authenticated user...
Show Hyperlink 5
Show Hyperlink 6
Show Hyperlink 7
endif
Solução
Tente algo como isso, ele usa o propriedade RoleGroups
. Você também pode especificar o RoleGroup para o usuário, mas se você usar o LoggedInTemplate que terá efeito para todos os usuários conectados em que não temos um grupo no RoleGroup. Finalmente, não há realmente uma maneira de ter um modelo compartilhado, como o cenário que você descreveu com Usuários / Anonymous, assim você pode ter que duplicar. Outra possibilidade é que você não incluí-los em sua LoginView e mostrá-los para os administradores também.
<asp:LoginView runat="server" ID="LoginView">
<AnonymousTemplate>
<asp:HyperLink runat="server" ID="Link5" />
<asp:HyperLink runat="server" ID="Link6" />
<asp:HyperLink runat="server" ID="Link7" />
</AnonymousTemplate>
<LoggedInTemplate>
<asp:HyperLink runat="server" ID="Link3" />
<asp:HyperLink runat="server" ID="Link4" />
<asp:HyperLink runat="server" ID="Link5" />
<asp:HyperLink runat="server" ID="Link6" />
<asp:HyperLink runat="server" ID="Link7" />
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
<asp:HyperLink runat="server" ID="Link1" />
<asp:HyperLink runat="server" ID="Link2" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
Outras dicas
Você certamente pode conseguir o que você está procurando com o controle ASP.NET LoginView.
Você vai querer olhar para o " RoleGroups " propriedade do controle LoginView, pois isso permite que você crie ContentTemplates que diferem com base no papel que o usuário autenticado pertence.
Por exemplo:
<form id="form1" runat="server">
<asp:LoginView id="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="administrator">
<ContentTemplate>
<ul>
<li>Hyperlink 1</li>
<li>Hyperlink 2</li>
</ul>
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="user">
<ContentTemplate>
<ul>
<li>Hyperlink 3</li>
<li>Hyperlink 4</li>
</ul>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
<AnonymousTemplate>
<ul>
<li>Hyperlink 5</li>
<li>Hyperlink 6</li>
</ul>
</AnonymousTemplate>
</asp:LoginView>
</form>
Usando este mecanismo permite que você defina o seu conteúdo para cada papel meramente declarativa no mark-up ASP. Alternativamente, você sempre pode fazer isso no código do lado do servidor, e pode, em seguida, mostrar / ocultar quaisquer controles (que runat = "server") dependendo de qualquer critério que você gosta. Por exemplo, como uma alternativa para o controle LoginView, você poderia usar o MultiView / View controles.