Добавить параметр URL в файл css в папке тем asp

Я написал немного кода, который помогает управлять версиями js-файлов. По сути, он вращается вокруг текущего диспетчера сценариев и добавляет путь к файлу javascript с хешем md5 файла. Так

<script src="../Javascript/Navigation.js" type="text/javascript"></script>

становится

<script src="../Javascript/Navigation.js?md5=70D2B4D1F236C7E340D9152B9E4102C3" type="text/javascript"></script>

Я думаю, что это довольно распространенная вещь (или ее варианты). Что я изо всех сил пытаюсь сделать, так это подобрать файлы css в папке app_themes и сделать то же самое.

Как мне войти и изменить ссылки css?


person ilivewithian    schedule 07.01.2010    source источник


Ответы (3)


Вы можете использовать адаптер управления, чтобы аккуратно внедрить это поведение на страницу следующим образом:

public class PageAdapter : System.Web.UI.Adapters.PageAdapter
{
    protected override void OnPreRender(System.EventArgs e)
    {
        foreach (var link in Page.Header.Controls.OfType<HtmlLink>().ToList())
            if (link.Attributes["type"].Equals("text/css", StringComparison.OrdinalIgnoreCase))
                if (link.Attributes["href"].Contains("/App_Themes/{0}/".Fill(Page.Theme), StringComparison.OrdinalIgnoreCase))
                   /* process link */

        base.OnPreRender(e);
    }
}

Вы можете подключить его, сохранив следующий файл в виде файла *.browser в папке App_Browsers:

<browsers>
  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.Page"
               adapterType="PageAdapter" />
    </controlAdapters>
  </browser>
</browsers>

В целом, я думаю, что Адаптеры элементов управления — это мощный АОП-подобный механизм для внедрения поведения в жизненные циклы элемента управления/страницы; они почти полностью игнорируются в пользу традиционной подклассификации.

person Nariman    schedule 07.01.2010

Я столкнулся с одной проблемой, заключающейся в том, что он повторяет запись css в разметке html при каждой обратной передаче. например, у меня есть newabc.css. код изменит его на newabc.css?v=1. если я увижу исходный код html после 5 постбэков, он будет иметь 5 "newabc.css?v=1". поэтому я добавил link.EnableViewState = False, он отлично работает, но действительно ли он нужен?

    Dim link As HtmlLink = Nothing

    For Each c As Control In Page.Header.Controls
        If TypeOf c Is HtmlLink Then
            link = TryCast(c, HtmlLink)

            If link.Href.IndexOf("App_Themes/", StringComparison.InvariantCultureIgnoreCase) >= 0 AndAlso link.Href.EndsWith(".css", StringComparison.InvariantCultureIgnoreCase) Then
                link.Href &= "?v=" & VER_CSS
                'link.EnableViewState = False
            End If
        End If
    Next
person par    schedule 26.02.2015
comment
У меня такая же проблема. Собственно говоря, у меня в папке App_Themes несколько css файлов и после постбека страница ссылается на первый css файл по всем тегам ссылок в шапке! Например: у меня есть a.css, b.css и c.css. Страница заканчивается тремя ссылками на a.css! Установка для EnableViewState значения false кажется исправлением для этого. - person AlbertVanHalen; 04.03.2015

Не изобретайте велосипед дважды, используя вместо этого Combres. Делает все, что вы просите, и даже больше!

person Mickel    schedule 07.01.2010