Đề nghị của tôi:
Chuyển đến Global.asax
. Đảm bảo phương pháp Application_Start
chứa dòng sau:
protected void Application_Start()
{
...
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Tìm hoặc tạo lớp BundleConfig
như sau, tốt hơn trong thư mục App_Start
:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
...
bundles.Add(new StyleBundle("~page1").Include(
"~/Styles/site.css",
"~/Styles/page1.css"));
bundles.Add(new StyleBundle("~page2").Include(
"~/Styles/site.css",
"~/Styles/page2.css"));
...
bundles.Add(new StyleBundle("~pageN").Include(
"~/Styles/site.css",
"~/Styles/pageN.css"));
}
}
Bây giờ sử dụng gói tương ứng trong mỗi trang thích hợp:
<link rel="stylesheet" type="text/css" href="Styles/page1" />
Hoặc tốt hơn từ mã:
@Styles.Render("~/Styles/page1")
(đây là cshtml
, nhưng cú pháp aspx
là chắc chắn rất giống nhau).
Lưu ý rằng bạn phải có một gói riêng trên mỗi trang. Bạn không nên sửa đổi một và cùng một gói trên bay. Các gói có Url ảo. Trong ví dụ của bạn, nó chỉ là css
. Các trình duyệt này được lưu trong bộ nhớ cache, vì vậy bất kể thời tiết bạn đã thay đổi nội dung của gói khi đang duyệt thì trình duyệt có thể cho rằng điều này giống nhau và không tìm nạp lại.
Nếu bạn không muốn để chăm sóc về việc thêm mỗi trang bằng tay để các phương pháp trên. Bạn có thể tự động hóa nó. mã sau đây có thể cung cấp cho bạn một ý tưởng như thế nào:
public class MyStyleHelper
{
public static string RenderPageSpecificStyle(string pagePath)
{
var pageName = GetPageName(pagePath);
string bundleName = EnsureBundle(pageName);
return bundleName;
}
public static string GetPageName(string pagePath)
{
string pageFileName = pagePath.Substring(pagePath.LastIndexOf('/'));
string pageNameWithoutExtension = Path.GetFileNameWithoutExtension(pageFileName);
return pageNameWithoutExtension;
}
public static string EnsureBundle(string pageName)
{
var bundleName = "~/styles/" + pageName;
var bundle = BundleTable.Bundles.GetBundleFor(bundleName);
if (bundle == null)
{
bundle = new StyleBundle(bundleName).Include(
"~/styles/site.css",
"~/styles/" + pageName + ".css");
BundleTable.Bundles.Add(bundle);
}
return bundleName;
}
}
Cách sử dụng:
<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />
Nguồn
2012-07-25 20:50:34
Nếu bạn chỉ tải site.css trong tổng thể và sau đó một trang tập tin css, thì tại sao bạn bundling? –
@TimBJames, I * đã * tải nội dung của toàn bộ thư mục.Tôi chỉ muốn tải CSS cấp trang web trong trang chính và sau đó gộp các tệp CSS bổ sung với nó khi cần thiết. –
đọc sách này lần đầu tiên. Điều này không đánh bại mục đích của việc đóng gói? Sau khi tất cả, mà không có bundling bạn sẽ tải site.css và page1.css trong lần tải đầu tiên, sau đó khi đi đến trang 2 nó sẽ chỉ tải page2.css, page3.css cho trang 3, vv Giả sử rằng các tệp CSS cụ thể của trang thường nhỏ hơn nhiều so với trang web chung, với gói bạn sẽ tải một tệp lớn khác trong mỗi trang và không cần gói, bạn sẽ tải một tệp nhỏ trong mỗi trang, chỉ cải tiến mới là trang đầu tiên bạn muốn tải 1 tập tin thay vì 2 (cùng kích thước) – Rodolfo