2009-04-15 35 views
3

我在使用LoginView時遇到了問題。有人可以告訴我,如果我可以在LoginView中做到這一點(以及如何),或者如果我需要使用代碼隱藏。使用ASP.NET 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 
+0

僞代碼看起來沒問題,你有什麼問題?你能發佈實際的代碼嗎? – 2009-04-15 14:35:07

+0

感謝您的編輯。事後看來,這是一個非常糟糕的標題。 – 2011-10-07 14:55:23

回答

12

嘗試是這樣的,它使用的RoleGroups財產。您還可以爲用戶指定RoleGroup,但是如果使用LoggedInTemplate,則它將影響登錄到RoleGroup中沒有Group的所有用戶。最後,沒有一種方法可以像使用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> 
+0

這就是我首先想到的,但我想看看是否有一種方法我不需要重複鏈接5-7。現在只有少數幾個鏈接,但我可以看到它增長。 – 2009-04-15 14:45:09

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控件。