Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ASP.NET LoginView动态显示链接_Asp.net_Loginview - Fatal编程技术网

使用ASP.NET LoginView动态显示链接

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

我在使用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

尝试类似这样的操作,因为它使用属性。您还可以为用户指定角色组,但如果使用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代码看起来正常,您有什么问题?你能发布实际代码吗?谢谢你的编辑。事后看来,这是一个非常糟糕的标题。