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

처음에는 숨 깁니다. 하지만 표준 웹 응용 프로그램 로그인 페이지를 사용하여 로그인 한 후 표시하고 계속 표시하고 싶습니다. 나는 다음을 시도했다 :

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

ID로 컨트롤에 액세스 할 수 있다고 생각합니다. FindControl() 메서드를 사용할 필요가 없습니다. 당신은 단지 menuAccountMembersDiv.Visible = menuAccountMembers.Visible = true를 사용할 수 있습니다;) –

답변

1

내가 갈 것를 참조 할 수 있습니다 당신의 사업부에 직접 visibiliy 인증 상태에 따라

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

당신은 당신의 LoginUser_LoggedInm를 필요로하지 않는 방법 ethod 메뉴는 사용자가 로그인에

을 그리고 외부 div가 숨겨져있는 경우 어쨌든 표시됩니다 안쪽에, 당신의 <asp:Menu> 컨트롤에서 아무것도를 Visible="false"를 제거하는 것을 기억됩니다에 따라 모든 부하에/숨기기 표시됩니다.

+0

물론 코드 제공을 위해 코드 숨김에서 DataBind()를 호출해야합니다.) –

+0

@Dima true! IMO WebForms 애플 리케이션에서 DataBind()에 대한 호출은 예외보다 더 규칙입니다 :) –

+0

감사합니다 Pauli. 그것이 작동하도록 관리. – Thomas

1

div 태그는 HtmlGenericControl 클래스입니다. 이 클래스에 액세스하려면 네임 스페이스 System.Web.UI.HtmlControls를 가져옵니다. 이 같은 사용

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

을 또는 당신은 UserControl을로 메뉴를 이동하고 숨기거나 당신의 UserControl을의 ID를 사용하여 표시 할 수 있습니다.

귀하의 질문에 도움이되기를 바랍니다. 당신이 메뉴의 div 태그에서 RUNAT = "서버"태그를 가지고 있기 때문에

+0

그리고 HtmlGenericControl이 Control에서 상속 받기 때문에 코드는 기본적으로 그가 갖고있는 것과 다르지 않습니다. –

+0

기본 클래스로 모두 캐스팅하지 않는 것이 좋음)이 경우 중요하지 않지만 다른 클래스에서는 사용합니다. 이것이 내 요점이다. –

1

, 당신은 설정 ... 코드에서 직접

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

또는

menuAccountMembersDiv.Visible = False; 
+0

enuAccountMembersDiv.Style [ "Display"] = "none"in C# –

+0

그는 마스터 페이지가있는 페이지에서 해당 컨트롤에 액세스하려고 시도합니다. –

관련 문제