Как принудительно обновить CSS при использовании тем ASP.NET? - PullRequest
3 голосов
/ 06 декабря 2011

Я работаю над сайтом, который использует темы ASP.NET.Проблема в том, что я обновил файл CSS, но исходный файл хранится в браузерах пользователей.Мне интересно, есть ли способ заставить браузер получить последнюю версию CSS-файла.

Тема задается кодом, подобным следующему:

private void SetPageTheme()
{
    Page.Theme = "ClientA_Theme";
}

Я видел другие ответы напохожие вопросы, которые предполагают, что я добавляю номер версии в файл CSS, например, /CssFile.css?v=1.2.3

Есть ли способ сделать это с темами ASP.NET?

1 Ответ

4 голосов
/ 06 декабря 2011

У меня была похожая проблема; вы можете настроить IIS для добавления заголовка истечения срока действия контента для файлов CSS, чтобы они никогда не кэшировались, или вы можете использовать решение, представленное в этом вопросе SO здесь

Вы также можете добавить метод для каждой из ваших страниц, чтобы пройти через элементы управления в вашем page.header (возможно, даже в вашей Master.Page!), Чтобы сделать что-то вроде:

protected override void OnPreRender(System.EventArgs e)    
{        
        foreach (Control link in Page.Header.Controls)        
        {                       
            if (link is HtmlLink)            
            {                  
                HtmlLink cssLink = link as HtmlLink;
                //Check if CSS link 
                if (cssLink.Attributes["type"].Equals("text/css", StringComparison.CurrentCultureIgnoreCase))                
                {                    
                    if (cssLink.Attributes["href"].Equals(String.Format("~/App_Themes/{0}/{0}.css", Page.Theme), StringComparison.CurrentCultureIgnoreCase))                    
                    {      
                        //perhaps add the version of your app here.                                                                
                        cssLink.Attributes["href"] += "?v1.1";                                          
                    }                
                }            
            }        
        }
        base.OnPreRender(e);     
    }

Другой способ - включить номер версии в название темы, например, MyTheme1_1 или аналогичный. Каждый выпуск будет загружать контент из «нового» URL, и, следовательно, контент должен запрашиваться снова для каждого пользователя. Очевидно, что это больше работы, но она должна выполняться один раз в каждом выпуске и не имеет накладных расходов, о которых вы упомянули ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...