如何始终在ASPX页面上获取最新版本的JS CSS?



我遇到了一个问题,我正在为我的网站部署新版本,由于旧的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_Load调用该方法一次即可完成。

请随时改进我的代码,并分享您的评论。

相关内容

最新更新