2010-01-07 28 views
6

我已經寫了一些幫助js文件版本化的代碼。本質上,它圍繞當前腳本管理器旋轉,並將javascript文件路徑附加到文件的md5散列。所以將url參數添加到asp主題文件夾中的css文件

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

成爲

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

我覺得這是一個相當普遍的事(或它的變體)。我正在努力做的是拿起app_themes文件夾中的css文件,並執行相同的操作。

如何進入並更改css鏈接?

回答

6

您可以使用控制接口整齊地注入這種行爲到頁面如下:

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

您可以通過保存插上以下作爲App_Browsers文件一個* .browser文件文件夾:

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

總的來說,我認爲控制適配器是注射行爲INT強大的AOP樣機制o控制/頁面生命週期;他們幾乎完全忽視了傳統的子分類。

1

改爲使用Combres來避免發明輪子兩次。你所要求的一切,以及更多!

2

我面臨的一個問題是,它在每次回傳中重複html標記中的css條目。例如, ,我有newabc.css。代碼會將其更改爲newabc.css?v = 1。如果我在5回發後看到html源代碼,它將有5個「newabc.css?v = 1」。所以我添加link.EnableViewState =假,它工作正常,但它實際上需要?

+0

我有同樣的問題。 事實上,我在App_Themes文件夾中有幾個css文件,並且在回傳之後,頁面引用了頭部中所有鏈接標籤上的第一個css文件! 例如:我有a.css,b.css和c.css。該頁面最後有3個鏈接指向a.css! 將EnableViewState設置爲false似乎是解決此問題的方法。 – AlbertVanHalen 2015-03-04 08:27:04

相關問題