2014-07-09 38 views
0

代碼中使用我有一個aspx頁面,從一個母版頁繼承,有兩個內容佔位符,就像這樣:用戶控制的變化性,在用戶控件的背後

<%@ Register Src="Controls/YearBook/YearBookExpander.ascx" TagName="YearBookExpander" TagPrefix="uc1" %> 
<%@ Register Src="Controls/YearBook/YearBook.ascx" TagName="YearBook" TagPrefix="uc2" %> 
<%@ Register Src="Controls/YearBook/YearBookSearch.ascx" TagName="YearBookSearch" TagPrefix="uc3" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="cphHead" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="cphMenu" runat="Server"> 
    <asp:UpdatePanel ID="upExpander" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <nav id='main-nav'> 
      <asp:Panel ID="pnlExpander" runat="server" CssClass="navigation"> 
       <uc1:YearBookExpander ID="ybExpander" runat="server" OnSearchClickEvent="ybExpander_Search" /> 
      </asp:Panel> 
      </nav> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="cphPage" runat="Server"> 
    <asp:Panel ID="pnlPage" runat="server"> 
     <uc2:YearBook ID="YearBook1" runat="server" ContentVisible="true" /> 
     <uc3:YearBookSearch ID="ybSearch" runat="server" /> 
    </asp:Panel> 
</asp:Content> 
<asp:Content ID="Content4" ContentPlaceHolderID="cphScripts" runat="Server"> 
    <script src="../Scripts/PersianCalendar.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     Calendar = 1; 
    </script> 
</asp:Content> 

對於一些JavaScript原因,我不能把我的「cphPage」內容進入更新面板,我需要根據cphMenu中單擊的鏈接來顯示/取消顯示cphPage的用戶控件。 這樣做我添加面板到用戶控件的更新面板,並希望看到或者當回傳發生unvisible這個面板,所以我定義每個用戶控件的屬性(在cphPage內容佔位符):

[Bindable(true, BindingDirection.TwoWay)] 
    public bool ContentVisible 
    { 
     get { return Convert.ToBoolean(Session["ContentVisible"]); } 
     set { Session["ContentVisible"] = value; } 
    } 

,並在後面的變化值基地之一的aspx代碼點擊鏈接:

private void uExpander_ExpanderClicked(object sender, ExpanderEventArgs e) 
{ 
    switch (e.Clicked) 
    { 
     case "YearBook": 

      YearBook1.ContentVisible = true; 
      ybSearch.ContentVisible = false; 

      break; 

     case "Search": 

      ybSearch.ContentVisible = true; 
      YearBook1.ContentVisible = false; 

      break; 

     default: 

      YearBook1.ContentVisible = true; 
      ybSearch.ContentVisible = false; 

      break; 
    } 
} 

和用戶控件我檢查這個值,可見光/ unvisible用戶控件的面板:

if (ContentVisible) 
     { 
      pnlCalendar.Visible = true; 
      pnlDefaultEvents.Visible = true; 
      pnlAddEvent.Visible = true; 
     } 
     else 
     { 
      pnlCalendar.Visible = false; 
      pnlDefaultEvents.Visible = false; 
      pnlAddEvent.Visible = false; 
     } 

但是這段代碼不起作用,因爲用戶控件在執行aspx代碼之前啓動...... 我該如何做這個場景?還有什麼其他的解決方案?

謝謝

回答

1

你有兩個選擇:

變化ContentVisible屬性:

[Bindable(true, BindingDirection.TwoWay)] 
public bool ContentVisible 
{ 
    set 
    { 
     pnlCalendar.Visible = value; 
     pnlDefaultEvents.Visible = value; 
     pnlAddEvent.Visible = value; 
    } 
} 

或移動代碼:

if (ContentVisible) 
{ 
     pnlCalendar.Visible = true; 
     pnlDefaultEvents.Visible = true; 
     pnlAddEvent.Visible = true; 
    } 
    else 
    { 
     pnlCalendar.Visible = false; 
     pnlDefaultEvents.Visible = false; 
     pnlAddEvent.Visible = false; 
    } 

進入用戶控制事件發生以後不是從父頁uExpander_ExpanderClicked事件生命週期。 OnPreRender應該遲到了,但不能太晚才能隱藏/顯示面板。

+0

謝謝你,你的解決方案解決我的問題:) –