2010-12-12 120 views
0

我在母版頁上有以下邊欄。它不是任何ContentPlaceHolder的一部分。ASP.Net主頁登錄後的側欄顯示(保持顯示在登錄狀態)

<div runat="server" visible="false" id="menuAccountMembersDiv" class="leftCol"> 
    <asp:Menu ID="menuAccountMembers" runat="server" StaticSubMenuIndent="16px" Visible="false"> 
    <Items> 
     <asp:MenuItem ImageUrl="~/Resources/x.png" 
     NavigateUrl="~/About.aspx" Text="x" ToolTip="x" 
     Value="b647ce4e-5c7f-400c-a921-ec7902494f26"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/y.png" 
     NavigateUrl="~/About.aspx" Text="y" ToolTip="y" 
     Value="y"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/sarahhunkin.png" NavigateUrl="~/About.aspx" 
     PopOutImageUrl="~/Resources/z.png" Text="z" 
     ToolTip="z" Value="z"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/a.png" 
     NavigateUrl="~/About.aspx" 
     PopOutImageUrl="~/Resources/apop.png" Text="a" 
     ToolTip="a" Value="a"></asp:MenuItem> 
    </Items> 
    </asp:Menu> 
</div> 

我最初隱藏它。但我想顯示它並在登錄後保持顯示。使用標準Web應用程序登錄頁面。我嘗試了以下方法:

protected void LoginUser_LoggedIn(object sender, EventArgs e) 
{ 
    Menu MenuAccountMembers = (Menu)Master.FindControl("menuAccountMembers"); 

    MenuAccountMembers.Visible = true; 

    Control menuAccountMembersDiv = (Control)Master.FindControl("menuAccountMembersDiv"); 

    menuAccountMembersDiv.Visible = true; 
} 

我不確定要與div標記進行交互,因爲沒有Div對象。無論如何,這不會顯示帶菜單的側邊欄

編輯: 我最終將以下代碼添加到母版頁本身。

public partial class SiteMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.Request.IsAuthenticated) 
     { 
      Control MenuDiv = this.FindControl("menuAccountMembersDiv"); 
      MenuDiv.Visible = true; 

      Menu AccountMenu = (Menu)MenuDiv.FindControl("menuAccountMembers"); 
      AccountMenu.Visible = true; 
     } 
    } 
} 
+1

我想你可以通過ID訪問控件。沒有必要使用FindControl()方法。你可以使用menuAccountMembersDiv.Visible = menuAccountMembers.Visible = true; ) – 2010-12-12 22:30:33

回答

1

我會去設置直接在您的div的visibiliy根據認證狀態

<div runat="server" visible="<%# Page.User.IsAuthenticated %>" id="menuAccountMembersDiv" class="leftCol"> 

這樣你不需要你LoginUser_LoggedIn米ethod菜單將顯示/隱藏在每個負載取決於用戶登錄或不

要記住,從你的<asp:Menu>控制刪除Visible="false",如果外div是隱藏的,裏面什麼也沒有它無論如何都會被顯示。

+0

而且,當然,他需要在代碼隱藏中調用DataBind()以獲取您提供的代碼;) – 2010-12-12 22:13:21

+0

@Dima true!國際海事組織在WebForms應用程序調用DataBind()是比規則更多的例外,雖然:) – 2010-12-12 22:19:48

+0

感謝波利。管理得到它的工作。 – Thomas 2010-12-12 22:21:05

1

div標籤是一個HtmlGenericControl類。要訪問此類導入命名空間System.Web.UI.HtmlControls;並使用這樣的:

HtmlGenericControl div = Master.FindControl("menuAccountMembersDiv") as HtmlGenericControl; 
if(div != null) 
{ 
    div.Visible = true; 
} 

或者你可以將你的菜單,用戶控件和隱藏或顯示只是用你的用戶控件的ID。

希望它能幫助你解決你的問題。

+0

由於HtmlGenericControl繼承自Control,所以你的代碼基本上和他已經沒有什麼不同。 – 2010-12-12 22:12:26

+0

我認爲把所有的東西都強制轉換爲基類並不是很好的做法))在這種情況下,它並不重要,但是在另一種情況下它可以。這是我的觀點。 – 2010-12-12 22:19:17

1

既然你有RUNAT =「服務器」菜單中的Div標籤標籤,您可以直接在代碼中引用它...

menuAccountMembersDiv.Style.Item("Display") = "none"; 

menuAccountMembersDiv.Visible = False; 
+0

enuAccountMembersDiv.Style [「Display」] =「none」in c# – 2010-12-12 22:06:23

+0

我認爲他試圖從擁有母版頁的頁面訪問該控件。 – 2010-12-12 22:08:47