使用ASP.NET LoginView动态显示链接
我在使用LoginView查看所需内容时遇到问题。有人能告诉我,我是否可以在LoginView中这样做(以及如何做),或者我是否需要使用代码隐藏 我有两个角色-管理员和用户。我想根据角色动态显示链接。我将在if语句中写出我想要的内容,因为这样更容易解释:使用ASP.NET LoginView动态显示链接,asp.net,loginview,Asp.net,Loginview,我在使用LoginView查看所需内容时遇到问题。有人能告诉我,我是否可以在LoginView中这样做(以及如何做),或者我是否需要使用代码隐藏 我有两个角色-管理员和用户。我想根据角色动态显示链接。我将在if语句中写出我想要的内容,因为这样更容易解释: if (role = Administrator) //Display only if administrator. Show Hyperlink 1 Show Hyperlink 2 else if (role = User
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
尝试类似这样的操作,因为它使用属性。您还可以为用户指定角色组,但如果使用LoggedInTemplate,则它将对所有登录且角色组中没有组的用户生效。最后,实际上没有一种方法可以像您与Users/Anonymous描述的场景那样拥有共享模板,因此您可能需要复制。另一种可能性是,您没有将它们包括在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>
使用ASP.NET LoginView控件,您当然可以实现所需的功能 您需要查看LoginView控件的“”属性,因为这允许您创建根据已验证用户所属角色而不同的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>
控件。这是我首先想到的,但我想看看是否有办法不必复制链接5-7。现在只有少数几个链接,但我可以看到它在增长。我添加了一个介绍。你为什么不想复制链接?我能想到的任何其他解决方案都不会带来太多好处。至少这比复制链接容易。我不想复制链接的原因是因为我不想在多个地方维护它们。你的登录视图在母版页上吗?这是减少重复的好方法。就LoginView而言,我认为与我能想到的其他技术相比,复制超链接控件是件琐碎的事情。是的,它在母版页上。我同意复制超链接是微不足道的。我只是希望有一个简单的解决方法。在你的代码示例中。管理员或用户角色是否会看到Hyperlink 5或6?我相信从我之前的测试来看,这些链接必须在不同的模板中复制。确定。我假设MultiView是一个容器控件,如果不使用FindControl()方法,我将无法再直接访问视图中的控件?@Mike-在我的示例中,链接5和6将不会被在此站点上经过身份验证的任何人看到(无论他们可能在哪个角色中)因为这是在匿名模板中定义的,只有未登录的用户才能看到。@Mike-Re:Multiview。多视图/视图控件充当一个“排序”容器,但是,请将其更多地视为有条件显示的多组标记。任何时候只有一个视图可见,但该视图中的控件可以通过其ID属性正常访问,而不是psuedo代码看起来正常,您有什么问题?你能发布实际代码吗?谢谢你的编辑。事后看来,这是一个非常糟糕的标题。