2010-01-07 22 views
6

Tôi đã viết một đoạn mã giúp phiên bản tệp js. Về cơ bản nó quay xung quanh trình quản lý tập lệnh hiện tại và nối thêm đường dẫn tệp javascript với một băm md5 của tệp. Vì vậy,Thêm thông số url vào tệp css trong thư mục chủ đề asp

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

trở thành

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

Tôi nghĩ rằng đây là một điều khá phổ biến để làm (hoặc các biến thể của nó). Những gì tôi đang đấu tranh để làm là lấy các tập tin css trong thư mục app_themes và làm tương tự.

Làm cách nào để vào và thay đổi liên kết css?

Trả lời

6

Bạn có thể sử dụng một bộ chuyển đổi kiểm soát để gọn gàng tiêm hành vi này vào trang như sau:

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

Bạn có thể cắm nó vào bằng cách tiết kiệm sau như một tập tin * .browser trong App_Browsers thư mục:

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

Nói chung, tôi nghĩ kiểm soát Adapters là một cơ chế AOP-like mạnh mẽ để tiêm hành vi int o kiểm soát/vòng đời trang; họ gần như hoàn toàn bị bỏ qua ủng hộ phân lớp truyền thống.

1

Tránh phát minh ra bánh xe hai lần bằng cách sử dụng Combres để thay thế. Có mọi thứ bạn yêu cầu và hơn thế nữa!

2

Tôi đang đối mặt với một vấn đề mà nó đang lặp lại mục nhập css trong đánh dấu html trên mỗi bài đăng. Ví dụ: , tôi có newabc.css. mã sẽ thay đổi nó thành newabc.css? v = 1. nếu tôi thấy nguồn html sau 5 postback, nó sẽ có 5 "newabc.css? v = 1". vì vậy tôi đã thêm link.EnableViewState = False, nó hoạt động tốt nhưng nó có thực sự cần thiết không?

+0

Tôi đã gặp vấn đề tương tự. Như một vấn đề của thực tế, tôi có một số tập tin css trong thư mục App_Themes và sau một postback trang đề cập đến các tập tin css đầu tiên trên tất cả các thẻ liên kết trong đầu! Ví dụ: tôi có a.css, b.css và c.css. Trang kết thúc bằng 3 liên kết đến tất cả tham chiếu đến a.css! Đặt EnableViewState thành false có vẻ là bản sửa lỗi cho điều này. – AlbertVanHalen

Các vấn đề liên quan