Отображение боковой панели главной страницы ASP.Net после входа в систему (сохранение ее отображения во время входа в систему)

У меня есть следующая боковая панель на главной странице. Он не является частью какого-либо 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>

Я изначально это скрываю. Но я хотел бы отобразить его и сохранить после входа в систему. Используя стандартную страницу входа в веб-приложение. Я пробовал следующее:

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 нет. В любом случае, это не отображает боковую панель с меню

EDIT: в итоге я добавил следующий код на главную страницу.

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

person Thomas    schedule 12.12.2010    source источник
comment
Я думаю, у вас есть доступ к элементам управления по ID. Нет необходимости использовать методы FindControl(). Вы можете использовать просто menuAccountMembersDiv.Visible = menuAccountMembers.Visible = true; )   -  person Dima Shmidt    schedule 13.12.2010


Ответы (3)


Я бы пошел на настройку видимости непосредственно в вашем div на основе статуса аутентификации.

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

таким образом, вам не нужен ваш метод LoginUser_LoggedIn, и меню будет отображаться/скрываться при каждой загрузке в зависимости от того, вошел ли пользователь в систему или нет

И не забудьте удалить Visible="false" из элемента управления <asp:Menu>, если внешний div скрыт, внутри него ничего не будет отображаться.

person Pauli Østerø    schedule 12.12.2010
comment
И, конечно же, ему нужно вызвать DataBind() в отделенном коде для кода, который вы предоставляете;) - person Dima Shmidt; 13.12.2010
comment
@Дима правда! IMO в приложениях WebForms вызов DataBind() является скорее правилом, чем исключением :) - person Pauli Østerø; 13.12.2010

Поскольку у вас есть тег runat="server" в теге Div меню, вы можете ссылаться на него непосредственно в коде...

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

or

menuAccountMembersDiv.Visible = False;
person NoAlias    schedule 12.12.2010
comment
enuAccountMembersDiv.Style[Display] = none в С# - person Pauli Østerø; 13.12.2010
comment
Я думаю, что он пытается получить доступ к этому элементу управления со страницы, на которой есть мастер-страница. - person Dima Shmidt; 13.12.2010

Тег div — это класс HtmlGenericControl. Чтобы получить доступ к этому классу, импортируйте пространство имен System.Web.UI.HtmlControls; и используйте что-то вроде этого:

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

Или вы можете переместить свое меню в UserControl и скрыть или показать только идентификатор вашего UserControl.

Надеюсь, это поможет вам в вашем вопросе.

person Dima Shmidt    schedule 12.12.2010
comment
а так как HtmlGenericControl наследуется от Control, ваш код практически ничем не отличается от того, что у него уже было. - person Pauli Østerø; 13.12.2010
comment
Я думаю, что не стоит приводить все к базовому классу )) В этом случае это не имеет значения, но в другом имеет значение. Это моя точка зрения. - person Dima Shmidt; 13.12.2010