Làm cách nào để tham chiếu tệp .css trên chế độ xem dao cạo?


195

Tôi biết cách đặt tệp .css trên tệp _Layout.cshtml, nhưng còn việc áp dụng biểu định kiểu trên cơ sở mỗi lượt xem thì sao?

Suy nghĩ của tôi ở đây là, trong _Layout.cshtml, bạn có <head>các thẻ để làm việc, nhưng không phải trong một trong các chế độ xem không bố cục của bạn. Các <link>thẻ đi đâu?

Câu trả lời:


338

Đối với CSS được sử dụng lại trong toàn bộ trang web, tôi xác định chúng trong <head>phần _Layout:

<head>
    <link href="@Url.Content("~/Styles/main.css")" rel="stylesheet" type="text/css" />
    @RenderSection("Styles", false)
</head>

và nếu tôi cần một số kiểu xem cụ thể, tôi xác định Stylesphần trong mỗi chế độ xem:

@section Styles {
    <link href="@Url.Content("~/Styles/view_specific_style.css")" rel="stylesheet" type="text/css" />
}

Chỉnh sửa: Thật hữu ích khi biết rằng tham số thứ hai trong @RenderSection, sai, có nghĩa là phần đó không bắt buộc trên chế độ xem sử dụng trang chính này và công cụ chế độ xem sẽ bỏ qua thực tế rằng không có phần "Kiểu" được xác định theo quan điểm của bạn. Nếu đúng, chế độ xem sẽ không hiển thị và một lỗi sẽ được đưa ra trừ khi phần "Kiểu" đã được xác định.


4
Bạn biết đấy, trong suy nghĩ thứ hai, điều đó không quá tệ. Tôi nghĩ nó chỉ mới và khác biệt.
MrBoJangles

@section Styles -> nói không thể giải quyết phần Styles, điều đó có nghĩa là gì?
Hồi sinh

2
@Sam, điều đó có nghĩa là không có phần nào được xác định trong Bố cục của bạn.
Darin Dimitrov

@DarinDimitrov Có cách nào để hiển thị ở vị trí chính xác thay vì ở cuối tiêu đề. Tôi muốn giữ một thứ tự cụ thể cho các ưu tiên css.
Marc

@Marc Nó được hiển thị trên một địa điểm, nơi bạn gọi RenderSection(thật đáng ngạc nhiên :), không phải ở cuối tiêu đề.
David Ferenczy Rogožan

22

Tôi đã thử thêm một khối như vậy:

@section styles{
    <link rel="Stylesheet" href="@Href("~/Content/MyStyles.css")" />
}

Và một khối tương ứng trong tệp _Layout.cshtml:

<head>
<title>@ViewBag.Title</title>
@RenderSection("styles", false);
</head>

Mà hoạt động! Nhưng tôi không thể không nghĩ rằng có một cách tốt hơn. CẬP NHẬT: Đã thêm "false" trong @RenderSectioncâu lệnh để chế độ xem của bạn sẽ không bị vỡ khi bạn bỏ qua việc thêm một cuộc @sectiongọi head.


Không có cách nào tốt hơn, mặc dù tôi sẽ đặt tên cho phần này "Head".
SLaks

Bạn hoàn toàn đúng. Gọi nó là "pageStyle" gợi ý rằng nó chỉ dành cho mục đích đó.
MrBoJangles

1
Nếu bạn làm như thế này, bạn sẽ cần thêm "MyStyles" trong tất cả các Chế độ xem, tôi sẽ đi với câu trả lời của Darins.
Filip Ekberg

Phải-o. Đó là lý do tại sao tôi thêm đối số sai vào @RenderSection(). Nắm bắt tốt.
MrBoJangles

12

Sử dụng

@Scripts.Render("~/scripts/myScript.js")

hoặc là

@Styles.Render("~/styles/myStylesheet.css")

có thể làm việc cho bạn

https://stackoverflow.com/a/36157950/2924015


4
Xin vui lòng không gửi liên kết đến câu trả lời trùng lặp . Thay vào đó, hãy xem xét các hành động khác có thể giúp người dùng trong tương lai tìm thấy câu trả lời họ cần, như được mô tả trong bài đăng được liên kết.
Mogsdad 22/03/2016


1

Tôi thích sử dụng trình trợ giúp html dao cạo từ dll Dependency Client

Html.RequireCss("yourfile", 9999); // 9999 is loading priority 

0

Bạn có thể cấu trúc này trong tập tin Layout.cshtml

<link href="~/YourCssFolder/YourCssStyle.css" rel="stylesheet" type="text/css" />

1
Làm thế nào điều này cho phép tôi áp dụng có chọn lọc một biểu định kiểu cho mỗi lượt xem?
MrBoJangles

Bạn cũng có thể thêm một lớp hoặc id cho mỗi phần và bên trong tiêu đề bạn có thể có một kiểu giống như kiểu được đề cập bởi mofidul. Những gì tôi làm là tôi làm việc với sass, vì vậy mỗi khung nhìn có một lớp chứa riêng biệt. Theo cách đó tôi đã tạo các trang sass cho mỗi phần, cuối cùng có cấu trúc và tổ chức hơn.
Leo

ý nghĩa của rel = "bản định kiểu" là gì?
Sven Krauter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.