3

我在使用 LoginView 来满足我的需要时遇到问题。有人可以告诉我是否可以在 LoginView 中执行此操作(以及如何),或者我是否需要使用代码隐藏。

我有两个角色 - 管理员和用户。我想根据角色动态显示链接。我将在 if 语句中写出我想要的内容,因为它更容易解释:

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
4

2 回答 2

12

尝试这样的事情,它使用该RoleGroups属性。您还可以为用户指定 RoleGroup,但如果您使用 LoggedInTemplate,它将对所有在 RoleGroup 中没有组的登录用户生效。最后,实际上没有办法像您在用户/匿名中描述的场景那样拥有共享模板,因此您可能不得不复制。另一种可能性是您不将它们包含在您的 LoginView 中并将它们也显示给管理员。

<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>
于 2009-04-15T14:38:34.283 回答
4

您当然可以使用 ASP.NET LoginView 控件实现您正在寻找的内容。

您需要查看 LoginView 控件的“ RoleGroups ”属性,因为这允许您创建根据经过身份验证的用户所属的角色而不同的 ContentTemplates。

例如:

<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>

使用这种机制,您可以在 ASP 标记中纯粹以声明方式为每个角色定义内容。或者,您始终可以在服务器端代码中执行此操作,然后可以根据您喜欢的任何标准显示/隐藏任何控件(runat="server")。例如,作为 LoginView 控件的替代方法,您可以使用MultiView/View控件。

于 2009-04-15T14:42:43.620 回答