2010-12-12 151 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