0

我的母版页上有以下侧边栏。它不是任何 ContentPlaceHolder 的一部分。

<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;
        }
    }
}
4

3 回答 3

1

div 标签是一个 HtmlGenericControl 类。要访问此类,请导入命名空间 System.Web.UI.HtmlControls;并使用这样的东西:

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

或者您可以将您的菜单移动到 UserControl 并隐藏或显示您的 UserControl 的使用 ID。

希望它能帮助你解决你的问题。

于 2010-12-12T22:03:57.240 回答
1

由于您在菜单的 Div 标记中有 runat="server" 标记,因此您可以直接在代码中引用它...

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

或者

menuAccountMembersDiv.Visible = False;
于 2010-12-12T22:04:48.237 回答
1

我会根据身份验证状态直接在您的 div 上设置可见性

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

这样您就不需要您的LoginUser_LoggedIn方法,并且菜单将根据用户是否登录在每次加载时显示/隐藏

并记住Visible="false"从您的<asp:Menu>控件中删除,如果外部div是隐藏的,那么它内部的任何内容都不会显示。

于 2010-12-12T22:10:43.530 回答