![](/img/trans.png)
[英]How to make visitors of a customers site always retrieve latest version of your 3rd party .js library
[英]How to always get latest version of JS CSS on your ASPX page?
我遇到了一个问题,其中我正在为我的网站部署新版本,并且由于旧的CSS和JS文件仍保留在用户浏览器缓存中,因此该网站预期的新外观全部消失了。
通过网络搜索为我提供了很多解决方案,但是,每个解决方案都需要花费很多精力来更改每个ASPX / ASCX以及要使用CSS和JS文件的其他文件中的链接。
没有通用的解决方案,我只能调用一次代码,此问题已解决。
我感到非常需要一些通用代码,这些代码可以一劳永逸地解决我的问题。
我写了一个简单的扩展,如下所示:
public static class PageExtension
{
public static IList<T> GetAllControlsRecursive<T>(this Control control) where T : Control
{
var rtn = new List<T>();
foreach (Control item in control.Controls)
{
var ctr = item as T;
if (ctr != null)
{
rtn.Add(ctr);
}
if (item.HasChildren())
{
rtn.AddRange(GetAllControlsRecursive<T>(item));
}
}
return rtn;
}
public static void SetPageLinks(this Control page)
{
if (page is Page p | page is MasterPage mp | page is UserControl uc)
{
var listLinks = page.GetAllControlsRecursive<HtmlLink>();
foreach (var link in listLinks)
{
link.Attributes["href"] = $"{page.ResolveUrl(link.Attributes["href"])}?v={ MyAppConstant.GetVersion}";
}
var listServerLinks = page.GetAllControlsRecursive<HtmlGenericControl>();
foreach(var link in listServerLinks)
{
if(link.Attributes["href"] !=null && !link.Attributes["href"].Contains(MyAppConstant.GetVersion))
{
link.Attributes["href"] = $"{page.ResolveUrl(link.Attributes["href"])}?v={ MyAppConstant.GetVersion}";
}
}
}
}
}
将PageExtension添加到我的Web应用程序中之后,我只需要在母版页或Page的Page_Load中调用一次该方法即可。
请随时改进我的代码,并在同一地方分享您的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.