2013-12-08 62 views
2

我正在使用ASP.NET器WebControls如下:取緩存控制在ASP.NET

<%@ OutputCache Duration="86400" VaryByParam="none" %> 

這意味着控制將是重裝空如果是已經添加到緩存中。問題是,在一些頁面上,我想隱藏這個控件,如果這可以從MasterPage代碼隱藏文件(它被加載的位置)完成,那就太好了。

我已經試過這樣:

if (Request.AppRelativeCurrentExecutionFilePath.ToLower().EndsWith("/sites/MySite/default.aspx") || Request.AppRelativeCurrentExecutionFilePath.ToLower().EndsWith("MySite.net")) 
{ 
    if(topGames_Mini1 != null) 
    { 
     //Load control 
     topGames_Mini1.visible=true; 
    } 
} 
else 
{ 
    Page.LoadControl("topGames_Mini1").Visible = false; 
} 

它將然而拋出以下異常在else:

文件 '/ Bradspel /網站/ mysite的/社區/ topGames_Mini1' 不 存在。

回答

1

您應該將UserControl放在Placeholder控件中。然後根據您的情況簡單地隱藏/顯示佔位符。

佔位符不爲本身呈現任何標記,所以沒有外部HTML標記的開銷。

I假設您必須在主頁面中註冊您的UserControl。因此,現在將userControl放置在PlaceHolder控件中。

<asp:ContentPlaceHolder ID="MainContent" runat="server"><!-- Of Master Page --> 
      <asp:PlaceHolder ID="place1" runat="server"> 
        <uc1:Test ID="Test1" runat="server" /><!-- Our User Control--> 
      </asp:PlaceHolder> 
</asp:ContentPlaceHolder> 

並在後面的代碼::

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(_Some_Condition_) 
     place1.Visible = true; 
     else 
     // Hide PlaceHolder and thus all controls inside it 
     place1.Visible = false; 

    }