2013-12-06 6 views
1

Проблема: когда пользователь показывает Default.aspx, страница загружает кешированную версию содержимого Blog.ascx (потому что она попала в тот же страница снова в течение 600 секунд), код Page.Title не выполняется, поэтому заголовок остается пустым, а не <title>Title of Blog Post</title>, например, когда он впервые загружает страницу в первый раз.Проблема кэширования: программная страница ascx/usercontrol Page.Title игнорируется при кэшированной загрузке страницы


У моего сайта asp.net есть Blog.ascx, чтобы обрабатывать загрузку содержимого отдельного сообщения в блоге. Default.aspx содержит ссылку и использует страницу Blog.ascx Blog.ascx имеет собственный кэширование:

<%@ OutputCache Duration="600" VaryByParam="None" VaryByCustom="Url" %> 

Обычай кэширования, расположенный в Global.asax.cs является:

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
     switch (custom.ToUpper()) 
     { 
      case "URL": 
       return context.Request.Url.ToString().ToLower().Trim(); 
      default: 
       throw new NotImplementedException(); 
     } 
    } 

Событие Blog.ascx.cs Page_Load обрабатывает значение/содержание программной метки

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.Title = "Title of Blog Post"; 
    } 

Любые предложения?

+0

Вы не можете избежать этой проблемы - вам нужно переконфигурировать свою идею, чтобы она работала, либо удалите кеш, либо сохраните заголовок на главной странице, либо создайте собственный кеш вашего рендера. – Aristos

ответ

0

Считаете ли вы использование UserControls? Если вы создали UserControl для содержимого вашей страницы, вы можете перенести объявление OutputCache в элемент управления, освободив при этом событие Page_Load, чтобы каждый раз указывать заголовок страницы.

+0

Если я правильно понимаю ваш комментарий, вы предлагаете то же самое, что я уже делаю? – SED

+0

Я пропустил это полностью. Сожалею. Опцией было бы использовать общедоступную переменную, установленную UserControl, на которую ссылается некоторый javascript: document.title = '<%variable%>'; – BobMabena

+0

К сожалению, это не вариант, потому что поисковые системы/искатели все равно будут видеть пустой заголовок, Javascript разрешит отображение только конечным пользователям. – SED