Добавьте параметр 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?
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>
В целом, я думаю, что управляющие адаптеры - это мощный AOP-подобный механизм для внедрения поведения в жизненные циклы управления / страницы; они почти полностью игнорируются в пользу традиционного подкласса.
Я сталкиваюсь с одной проблемой, что это повторяет запись 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
Избегайте изобретать колесо дважды, используя вместо этого Combres. Делает все, что вы просите, и многое другое!