Add url parameter to css file in asp themes folder

前端 未结 3 2023
抹茶落季
抹茶落季 2021-01-12 20:21

I have written a bit of code that helps with versioning of js files. Essentially it spins around the current script manager and appends the javascript file path with an md5

相关标签:
3条回答
  • 2021-01-12 21:11

    I am facing one issue that it is repeating css entry in html markup on every postback. for example, I have newabc.css. the code will change it to newabc.css?v=1. if I see html source after 5 postback, it will have 5 "newabc.css?v=1". so I added link.EnableViewState = False, it works fine but is it actually needed?

        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
    
    0 讨论(0)
  • 2021-01-12 21:20

    Avoid to invent the wheel twice by using Combres instead. Does everything you ask for, and more!

    0 讨论(0)
  • 2021-01-12 21:21

    You can use a control adapter to neatly inject this behavior into the page as follows:

    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);
        }
    }
    

    You can plug it in by saving the following as a *.browser file in the App_Browsers folder:

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

    Overall, I think Control Adapters are a powerful AOP-like mechanism for injecting behavior into control/page life-cycles; they are almost entirely ignored in favor of traditional sub-classing.

    0 讨论(0)
提交回复
热议问题