2010-01-07 5 views
6

js 파일 버전 관리에 도움이되는 약간의 코드를 작성했습니다. 본질적으로 그것은 현재 스크립트 관리자 주위를 돌고 파일의 md5 해쉬로 javascript 파일 경로를 추가합니다. 그래서asp 테마 폴더에있는 CSS 파일에 url 매개 변수 추가

<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

당신은 깔끔하게 페이지에이 동작을 삽입하는 컨트롤 어댑터를 사용할 수 있습니다 폴더 :

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

이 점수는 제어 어댑터 행동의 INT를 주입하기위한 강력한 AOP와 같은 메커니즘 생각 o 통제/페이지 수명주기; 그들은 전통적인 하위 분류에 찬성하여 거의 무시됩니다.

1

휠을 Combres 대신 두 번 사용하지 마십시오. 당신이 요구하는 모든 것을, 그리고 더!

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 파일로 다음 저장하여 꽂 수 있습니다 다음과 같이

2

나는 모든 포스트 백에서 HTML 마크 업에서 CSS 항목을 반복한다는 한 가지 문제에 직면하고 있습니다. 예를 들어 newabc.css가 있습니다. 코드는 newabc.css? v = 1로 변경합니다. 5 개의 포스트 백 후에 html 소스를 보면 5 "newabc.css? v = 1"이됩니다. 그래서 나는 link.EnableViewState = False를 추가했지만 제대로 작동하지만 실제로 필요합니까?

+0

동일한 문제가있었습니다. 사실, App_Themes 폴더에 몇 개의 CSS 파일이 있고 포스트 백 이후에는 페이지가 머리에있는 모든 링크 태그의 첫 번째 CSS 파일을 참조합니다! 예 : a.css, b.css 및 c.css가 있습니다. 페이지는 모두 a.css를 가리키는 3 개의 링크로 끝납니다! EnableViewState를 false로 설정하면이 문제를 해결할 수 있습니다. – AlbertVanHalen