2013-12-08 5 views
2

Я использую следующий в WebControls ASP.NET:Fetch кэшированных управлений в 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; 
} 

Это будет, однако, бросить следующее исключение в другой:

файл '/ Bradspel/сайтов/MySite/сообщества/topGames_Mini1' не существовать.

ответ

1

Вы должны лучше разместить UserControl внутри элемента управления Placeholder. Затем просто скройте/покажите 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> 

и в Кодексе за ::

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; 

    } 
Смежные вопросы