2010-11-10 37 views
7

Tôi có một trang web được triển khai cho hơn một chục khách hàng. Trang web chính có mẫu cơ bản và mỗi khách hàng có một thư mục khách hàng ghi đè các màu. Vấn đề là có rất nhiều tệp CSS, do đó thực hiện thay đổi buộc chúng tôi cập nhật mọi ứng dụng khách mất một thời gian dài. Quá trình xây dựng tự động sẽ thay thế các tệp được cập nhật.Sử dụng C# để tự động tạo các tệp CSS

Thay vào đó, tôi muốn thay đổi tệp CSS thành liên kết người dùng và các liên kết người dùng đó có thể kế thừa từ một điều khiển người dùng khác nơi lưu trữ giá trị cụ thể của khách hàng.

Vì vậy, thay vì có tệp forms.css và sau đó tệp /client/forms.css tôi sẽ có tệp Forms.ascx kế thừa từ một điều khiển người dùng có chứa màu.

Ex:

<%@ Control Language="C#" ClassName="Forms" %> 
<%@ Register TagPrefix="css" TagName="Client" Src="~/css/ClientStyling.ascx" %> 

/* CSS Document */ 
body 
{ 
    color:<%=Client.BodyColor%> 
} 

Sau đó masterpage sẽ kế thừa từ các usercontrol để thay thế. Điều này sẽ làm cho việc duy trì các trang web của khách hàng dễ dàng hơn nhiều.

Giải pháp này có hiệu quả và được khuyến nghị không? Hoặc là có một cách tốt hơn để thực hiện cùng một kết quả cuối cùng?

Nếu điều này là có thể, nó cũng sẽ có thể có kiểm soát Forms.ascx đầu ra đánh dấu như CSS? Hoặc làm cho phần mở rộng .css và vẫn có thuộc tính ascx?

+0

Bạn có dự tính Client.BodyColor đến từ cơ sở dữ liệu hoặc tệp cấu hình không? –

+0

Nó sẽ được mã hóa cứng trong một usercontrol. Quá trình xây dựng tự động sẽ chăm sóc nó. –

Trả lời

11

Thay vì điều khiển web, bạn có thể nên tạo một Trình xử lý chung. Điều này sẽ không có phí mà một điều khiển web có.

  1. Trong xử lý của bạn, chấp nhận ClientId qua chuỗi truy vấn - điều này cho phép bạn cache về mặt kĩ client
  2. Trong file .master của bạn, bạn có thể liên kết với nó < link src = "MyCssHandler.ashx ClientID =? <% = ClientID%> ">

Trong trình xử lý của bạn, bạn có một số cách để làm việc với CSS.

  1. Chỉ cần có một loạt phản hồi.viết cho css và đặt vào các giá trị khách hàng có liên quan
  2. Tạo tệp CSS bên ngoài có mã định danh đặc biệt riêng - có thể là <%%>. Sau đó, bạn có thể tải tất cả các giá trị cụ thể của khách hàng trong Bộ sưu tập NameValuePair và sau đó lặp qua tệp CSS bên ngoài, phân tích cú pháp <% NAME%> và thay thế bằng giá trị chính xác. Sau đó response.write tệp này. Nhiều phức tạp thật nhưng nó cho phép một địa ngục của rất nhiều file CSS sạch
1

Viết nó ra dưới dạng tệp và để cho trình duyệt nhặt nó lên như bất kỳ tệp CSS nào khác.

Tạo biểu định kiểu nội tuyến ngăn chặn cơ chế bộ nhớ cache của máy khách, buộc CSS của bạn phải được phân phát với mỗi trang.

+0

Tôi không muốn css được nội tuyến. Tôi muốn nó được trong một tập tin .css riêng biệt mà sau đó sẽ được lưu trữ bởi trình duyệt và máy chủ. –

+1

Inline Stylesheets = bad! –

1

Điều này hoàn toàn có thể. Bạn cũng có thể cân nhắc việc xếp tầng các bảng định kiểu của bạn, do đó, động lực sẽ nhập một tệp định sẵn tĩnh (có lẽ là lớn hơn).

Asp.NET cũng hỗ trợ cho các chủ đề, nhưng phải trung thực CSS mạnh hơn rất nhiều.

Tại sao bạn lại nghĩ ASCX thay vì ASPX? Tôi đã nghĩ rằng vì một tệp css đại diện cho toàn bộ phản hồi, nó có thể phù hợp trong một trang.

một ashx có lẽ là hình thức nhẹ nhất, nhanh nhất của xử lý bạn có thể thực hiện, vì vậy bạn có thể muốn nhìn vào đó ...

Oh và chắc chắn rằng bạn sẽ có được các thông số bộ nhớ đệm của bạn ngay!

7

Một lựa chọn khác để xem xét chỉ có thể sử dụng một "biên dịch CSS" - chẳng hạn như SASS, LESS hoặc thậm chí HSS mà có thể hỗ trợ cấu trúc tiện dụng như "mixins" và bao gồm các tệp khác. Cách tiếp cận này có thể cho phép một hệ thống, trong khi không năng động, có thể dễ dàng cấu hình cho các nhu cầu của khách hàng khác nhau của bạn.

Ví dụ: với "Trình biên dịch CSS" , toàn bộ lược đồ màu có thể được lưu trữ trong một tệp như các biến hoặc mẫu có thể xuất (tùy thuộc vào "trình biên dịch") - sửa đổi tệp đó, "biên dịch lại" ** và wham, giao diện sơ đồ màu mới ở khắp mọi nơi (SASS cũng hỗ trợ tính toán về màu sắc - chẳng hạn như dịch chuyển Hue). Điều này có thể làm cho việc triển khai/quản lý việc sử dụng nội dung tĩnh khả thi đủ cho các mục đích của bạn.

Tôi sử dụng SASS (nó phù hợp với nhu cầu/phong cách của tôi trong khi LESS/HSS không). Tôi sẽ không chuyển đổi trừ khi tôi thực sự, thực sự phải (có nghĩa là: uhh, không bao giờ) - SASS trong chế độ SCSS cũng hiểu cú pháp CSS để bạn có thể phát triển hoặc trộn và kết hợp (LESS và HSS cũng làm việc như thế này, nhưng HSS chỉ làm việc với một tập hợp con cú pháp CSS chặt chẽ hơn). Các trình biên dịch CSS cũng có thể được sử dụng trong các công cụ mẫu kết hợp (như TT4) hoặc tận dụng các tệp được tạo động (không năng động như trong câu hỏi, nhưng năng động theo nghĩa là chúng đến từ một số nguồn dữ liệu khác) năng lượng là cần thiết.

Trong khi chỉ CSS bình thường xếp tầng và tên lớp/bộ chọn có thể đi một chặng đường dài, tôi thấy dễ dàng hơn để tách "tầng hợp lý" (CSS, nơi CSS/tầng là quan trọng) và "geeze, tôi muốn điều này làm việc giống như một mẫu "(trình biên dịch CSS, sẽ xử lý các trường hợp mà CSS/tầng bị lạm dụng).

** Cả SASS và LESS đều có thể giám sát tệp và tự động biên dịch chúng cho bạn. SASS thậm chí cho phép giám sát toàn bộ các thư mục

+0

Chỉ mới bắt đầu chơi với SASS. Tôi yêu nó cho đến nay. –

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