在ASP.NET中获取缓存控件

时间:2013-12-08 17:56:01

标签: asp.net caching webforms outputcache web-controls

我在ASP.NET webcontrols中使用以下内容:

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

这意味着如果控件已添加到缓存中,则控件在重新加载时将为null。问题是,在某些页面上我想要隐藏这个控件,如果可以从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 / sites / MySite / community / topGames_Mini1'没有   存在。

1 个答案:

答案 0 :(得分:1)

您最好将UserControl放在Placeholder控件中。然后根据您的条件隐藏/显示占位符。

占位符不会为自身呈现任何标记,因此外部HTML标记没有任何开销。

我假设您必须在主页面中注册了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>

并在Code behind ::

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; 

    }