我在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'没有 存在。
答案 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;
}